私は引数としてユーザー名とパスワードを与えられた、Linuxユーザーを作成するpythonスクリプトを持っています。私は のpython(例えば、subprocess.Popen('/pass.py')
)から同じVM上で直接SSH経由でPythonスクリプトの引数としてパスワードを渡す方法は?
- コールスクリプト(例えば、
./pass.py
) - コールスクリプト
- に 上のpythonから別のVMからスクリプトを呼び出したいですSSH。 (例えば、
subprocess.Popen(['ssh', 'host', 'pass.py')
)
TL; DRは、最終的なコードsnippitを確認し、最初の場合の
getpass
作品を問います。
password = getpass.getpass()
私は、SSH、(ssh myhost /path/to/script.py username
)上でこれを実行する場合しかし、私は次のような出力が得られます。また
/usr/lib64/python2.6/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
Password: password123
、私はsubprocess
を使用してpythonでこのスクリプトを実行する場合:
# Running from same host
proc = subprocess.Popen(['./pass.py'], stdin=subprocess.PIPE)
# Running from different host
proc = subprocess.Popen(['ssh', 'myhost', '/path/to/pass.py', 'username'], stdin=subprocess.PIPE)
subprocess.Popen
の周囲にハングしているようで、パスワードを受け付けません。
しかし、私がgetpass.getpass()
を取り除いてraw_input
に置き換えると、ケース2と3で動作します。パスワードをエコーしません。
従って私は、引数として--script
を取り、raw_input
経由でパスワードを要求され、代わりに次のことを考えています:
import sys, getpass, argparse
parser = argparse.ArgumentParser()
parser.add_argument("username")
parser.add_argument("-s", "--script", action="store_true")
args = parser.parse_args()
username = args.username
if args.script:
password = raw_input("Password: ")
else:
password = getpass.getpass()
これは私の例すべての3つを満たすとパスワードをエコーされていないよう。
これは安全でパスワードが記録されないと仮定して正しいですか?