Ich habe ein Python-Skript, das einen Linux-Benutzer erstellt, mit einem Benutzernamen und einem Passwort als Argumente. Ich möchteWie Passwörter als Argument an ein Python-Skript über SSH übergeben?
- rufen Sie das Skript direkt (zB
./pass.py
) - rufen Sie das Skript auf dem gleichen VM von Python (zB
subprocess.Popen('/pass.py')
) - rufen Sie das Skript aus einer anderen VM aus Python über SSH. (Z.B.
subprocess.Popen(['ssh', 'host', 'pass.py')
)
TL; DR den endgültigen Code snippit prüfen und
getpass
Arbeiten für den ersten Fall in Frage stellen.
password = getpass.getpass()
Allerdings, wenn ich diese über ssh laufen, (ssh myhost /path/to/script.py username
) bekomme ich folgende Ausgabe:
/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
Auch, wenn ich dieses Skript in Python laufen mit subprocess
:
# 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)
Es scheint um subprocess.Popen
hängen und wird das Passwort nicht akzeptieren.
Wenn ich jedoch getpass.getpass()
los und ersetzen Sie es durch raw_input
, funktioniert es für die Fälle 2 und 3. Es gibt nicht das Passwort zurück.
ich daher statt der folgenden denke, die --script
als Argument übernimmt und fragt nach dem Passwort über 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()
Diese alle drei meiner Fälle erfüllt und scheint nicht das Passwort zu Echo .
Stimmt die Annahme, dass dies sicher ist und das Passwort nicht protokolliert wird?