他の人がパスワードを持っている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内で誤ってパスワードを表示するのが非常に簡単です。友達は暗号化メカニズムと機能を変更してそれを強化し、ユーザーアカウントに読み取り権限はありませんが、実行権限があり、他のユーザーとグループが所有する場所にファイルを保存できます。ホストが存在しないか、ホストにアクセスできません。secretfile
openssl
sha512sum
cat
quicklook
token()
sudoers
root
生成されると、secretfile
スクリプトはcurl
指定されたユーザー認証とコマンドラインに渡されたURLを使用して実行されます。これらのオプションは、設定ファイル形式でオプション(設定ファイルから読み取られる)をSTDIN
使用して渡されます。次の要件を満たすように簡単に拡張できます。 :)curl
-K -
STDIN
curl
man 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()