アップデート:段階的なソリューションを完了

アップデート:段階的なソリューションを完了

他の人がパスワードを持っているWebサイトにアクセスするには、curlコマンドを実行する必要があります。

例えば curl --basic --user myfriendsname:friendspassword http://www.updateinfo.com

私の友人のパスワードを見なくてもこのスクリプトを起動する方法が必要です。

答え1

からman curl

-u, --user <user:password>
  ...
  If you just give the user name (without entering a colon) curl will prompt
  for a password.
  ...

キーボードを渡して(またはscreen共有tmux)入力してください。

答え2

確認したりman curlカールのよくある質問、/パラメータcurlがあることがわかります。--config-K

カール・パラメーターを読み取る構成ファイルを指定します。構成ファイルは、コマンドラインパラメータを作成した後に実際のコマンドラインで作成されたように使用できるテキストファイルです。 ...(男の巻き)

たとえば、パスワードを保存して復号化するために使用できますgpg。復号化パラメータは-d

アップデート:段階的なソリューションを完了

最初は完全な解決策を提供しませんでした。魚を与える、時を一人で釣り方を学ぶより価値があります。

しかし、進行方法がわからないようです。次の手順に従ってください。Python 3.3でHTTPパスワードの秘密を管理するための迅速で汚いスクリプト

スクリプトをダウンロード(またはgitを使用してリポジトリを複製)してchmod u+x ./curling-with-secrets.py実行すると、./curling-with-secrets --help次のようになります。

❯ ./curling-with-secrets.py --help
usage: curling-with-secrets.py [-h] [--secretfile [SECRETFILE]] user url

This is curling-with-secrets by Guy Hughes.

positional arguments:
  user                  the username to pass to curl
  url                   the url to pass to curl

optional arguments:
  -h, --help            show this help message and exit
  --secretfile [SECRETFILE]
                        specify an alternative secret file

スクリプトは、ファイルパスのソルトハッシュをパスワードとして使用してファイルを暗号化することによって、そのディレクトリの変数secret.encによって提供されるファイルを生成します。これは高いレベルのセキュリティを提供しませんが、誰でもパスワードを表示するには少し労力が必要です。パスワードをプレーンテキストで保存すると、OS Xを使用するか、OS X内で誤ってパスワードを表示するのが非常に簡単です。友達は暗号化メカニズムと機能を変更してそれを強化し、ユーザーアカウントに読み取り権限はありませんが、実行権限があり、他のユーザーとグループが所有する場所にファイルを保存できます。ホストが存在しないか、ホストにアクセスできません。secretfileopensslsha512sumcatquicklooktoken()sudoersroot

生成されると、secretfileスクリプトはcurl指定されたユーザー認証とコマンドラインに渡されたURLを使用して実行されます。これらのオプションは、設定ファイル形式でオプション(設定ファイルから読み取られる)をSTDIN使用して渡されます。次の要件を満たすように簡単に拡張できます。 :)curl-K -STDINcurlman curl

私はPythonがあまり好きではないので、このスクリプトにはいくつかの問題があるかもしれませんが、これはあなたにとって良い出発点になるかもしれません。必ず徹底的にテストする必要があります。

スクリプトの完全なソースは次のとおりです。

#!/usr/bin/env python3.3

#  Guy Hughes, 2014
#  GNU General Public License Version 3, 29 June 2007

from sys import stdin
from sys import stdout
import os
import argparse
#from sys import os.environ
#from sys import os.access
#from sys import os.mkdirs
#from sys import os.path
import subprocess
import errno
import getpass

def init():
    global args
    global secretfile
    global secretfiledir
    # parse args
    parser = argparse.ArgumentParser(description='This is curling-with-secrets by Guy Hughes.')
    parser.add_argument('--secretfile',nargs='?',help='specify an alternative secret file',type=str)
    parser.add_argument('user', help='the username to pass to curl',type=str)
    parser.add_argument('url', help='the url to pass to curl',type=str)
    args=parser.parse_args()
    #secretfile=os.path.abspath(os.environ.get('XDG_CONFIG_HOME',os.environ.get('HOME') + "/.config") + "/secretcurl/secret.enc")
    if args.secretfile:
        secretfile = os.path.abspath(args.secretfile)
    else:
        secretfile=os.path.abspath('./secret.enc')
        secretfiledir=os.path.dirname(secretfile)

    if check():
        curl()

def check():
    if os.path.isfile(secretfile) and os.access(secretfile, os.R_OK):
        print("I found secretfile at %s. [OK]" % secretfile)
        return True
    else:
        print("I did not find the secretfile at %s. We'll now create it..." % secretfile)
        return createfile()

def token():
    echop=subprocess.Popen(["echo", secretfile], stdout=subprocess.PIPE)
    shap=subprocess.Popen(['sha512sum'],stdout=subprocess.PIPE,stdin=echop.stdout)
    grepp=subprocess.Popen(['grep', '-Eo','\'^.{40}\''],stdout=subprocess.PIPE,stdin=shap.stdout)
    echop.stdout.close()
    shap.stdout.close()
    result=grepp.communicate()[0]
    return result


def createfile():
    # safety check
    if os.path.isfile(secretfile):
        print("FATAL: secretfile exists at %s" % secretfile)
        print("Stopping, to prevent secretfile from being overriden.")
        print("If you wish to overwrite the secretfile, first delete it yourself this run this command again.")
        exit(1)

    print("Creating the secretfile at %s" % secretfile)
    print("Remember: Once the secret file is created, this script"
          " will only be able to decrypt while it is in the same directory and filename."
          "If you ever wish to rename the secretfile, you'd need to modify this script "
          "or recreate the secretfile using this script.")

    print("Checking for directory %s" % secretfiledir)
    if not os.path.exists(secretfiledir):
        sys.stdout.write("Making directories...")
        os.makedirs(secretfiledir, exist_ok=True)
    else:
        print("Parent directories are OK")

    print("Please enter the secret password to be passed to curl:")
    password=getpass.getpass()
    thetoken = token()
    echop=subprocess.Popen(['echo',password],stdout=subprocess.PIPE)
    opensslp=subprocess.Popen(['openssl', 'enc', '-aes-256-cbc',
                     '-salt', '-a',
                     '-k', thetoken,
                     '-out', secretfile
                     ], stdin=echop.stdout)
    echop.stdout.close()

    del password
    del thetoken

    print("Createfile done.")
    return True

def curl():
    print("Decrypting the password...")
    thetoken=token()
    opensslp=subprocess.Popen(['openssl','enc','-aes-256-cbc','-d', '-a','-k',thetoken,
                                      '-in', secretfile],stdout=subprocess.PIPE)
    password=opensslp.communicate()[0].decode('utf-8')
    print(args)
    print(args.url)
    print(password)
    curlconfig="user = " + args.user + "\:" + password  + "\nurl = " + args.url
    curlp=subprocess.Popen(['curl','--basic', '-K', '-'],
                          stdin=subprocess.PIPE,stderr=subprocess.STDOUT,shell=False)
    result=curlp.communicate(input=bytes(curlconfig, 'UTF-8'))
    print(result)



    del password



init()

関連情報