Lesen von Passwörtern ohne Anzeige auf dem Bildschirm in Bash-Skripten


20

Wie liest man Passwörter in Bash-Skripten wie Tools, die sie nicht auf dem Terminal anzeigen?

(Das Ändern der Schriftart in Schwarz auf Schwarz ist möglicherweise schwierig, da das Kopieren und Einfügen einfach ist - es ist also keine Lösung.)


3
Für jeden, der dies liest: Lies KEINE Passwörter mit eingeschaltetem Echo und Schwarz-auf-Schwarz ein. Das Passwort wird weiterhin übertragen, und wenn das Terminal die von Ihnen verwendeten Terminalanweisungen nicht kennt, werden die Zeichen sichtbar wiedergegeben. Echo ausschalten. Verwenden Sie termios, stty, read -s, alles, was sie tut.
Alexios

Deshalb habe ich geschrieben, dass es keine Lösung ist;).
Grzegorz Wierzowiecki

Tatsächlich! Manchmal überfliegen die Leute Fragen und kommen zu fehlgeleiteten Schlussfolgerungen. :)
Alexios

Antworten:


30

Von help read:

-s        do not echo input coming from a terminal

1
Groß. Es steht nicht in meinem man read, ich habe nicht eingecheckt help read. Gut zu wissen.
Grzegorz Wierzowiecki

3
@GrzegorzWierzowiecki: Sie sehen das falsche Handbuch. Sie müssen das Handbuch von Bash dh lesen man bashund dort finden Sie -s OptionSilent mode. If input is coming from a terminal, characters are not echoed.
Pradeepchhetri

5

Ich habe immer das stty -echoEcho ausgeschaltet, dann gelesen und danach getan stty echo(lesen Sie mehr, indem Sie man von stty- ie sehen man stty). Dies ist aus Sicht des Programmierers nützlicher, da Sie das Echo deaktivieren und dann ein Kennwort aus einer Programmiersprache wie Java, C (++), Python usw. mit ihren Standard-Standard-"Lesegeräten" lesen können.

In Bash könnte die Verwendung so aussehen:

echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd

Python würde zum Beispiel so aussehen:

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

Ich musste das oft in Python machen, deshalb kenne ich es aus dieser Perspektive ziemlich gut. Dies ist jedoch nicht sehr schwer in andere Sprachen zu übersetzen.


-1

Ihre Frage lautet irgendwie anders "in einer Art und Weise wie Werkzeuge ???" Ich weiß also nicht genau, ob das für dich funktionieren wird:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.