SSH macht alle eingegebenen Kennwörter sichtbar, wenn der Befehl als Argument für den SSH-Befehl angegeben wird

45

Wenn ich das laufen lasse:

ssh user@server 'mysql -u user -p'

Wenn ich nach dem MySQL-Passwort gefragt werde und mit der Eingabe beginne, wird das Passwort auf dem Bildschirm angezeigt. Wie kann ich das verhindern? Wenn ich mich über anmelde sshund dann den MySQL-Befehl ausführe, funktioniert alles einwandfrei.

user110971
quelle
5
Glaubst du nicht, dass der Titel ziemlich unklar ist? Man könnte sagen, er macht den gesamten Text einschließlich Passwörtern sichtbar. Und wie soll ssh wissen, was Sie eingeben, ist ein Passwort gegen einen anderen Befehl oder Daten?
Barlop
@barlop Ich bin offen für Vorschläge.
user110971
@barlop gut es funktioniert, wenn Sie den Befehl ausführen, sobald Sie zum Server ssh. Ich suche nach einer Möglichkeit, das SSH-Verhalten zu ändern, wenn die Befehle als Argument angegeben werden.
user110971
es ist wahrscheinlich nicht so notwendig, aber können Sie ein vollständiges Beispiel aus der Konsole einfügen, das nicht nur den Befehl ssh, sondern auch die Antwort und die folgende mysql-Eingabeaufforderung anzeigt? Sie können das Passwort in swisscheese ändern, um es nicht auf der Website zu veröffentlichen. Ich kann es derzeit nicht testen
barlop
@barlop Es sind genau die Nachrichten, die Sie erwarten würden, dh ssh password gefolgt von MySQL-Passwortabfragen
user110971

Antworten:

100

Wenn Sie einen Remote-Befehl zum Ausführen bereitstellen, weist SSH kein tty zu, sodass der Remote-Befehl das Echo nicht deaktivieren kann. Sie können SSH mit der folgenden -tOption zwingen, ein tty anzugeben :

ssh -t user@server 'mysql -u user -p'

Die entsprechende Option (für -ooder für die Konfigurationsdatei) lautet RequestTTY. Ich würde davor warnen, es in config zu verwenden, da es unerwünschte Auswirkungen auf nicht interaktive Befehle haben kann .

Toby Speight
quelle
15
Oder Sie können ~ / .ssh / config bearbeiten, um diesen bestimmten Host so zu konfigurieren, dass er immer einen TTY anfordert. Sehen Sie RequestTTYin man 5 ssh_config.
ein Lebenslauf vom
7
@ MichaelKjörling (und Toby): vielleicht eine kleine Warnung hinzufügen, dass das Hinzufügen von "-t" nur für die interaktive Verwendung reserviert sein sollte, da es Nebenwirkungen hat. Für einen guten Überblick über einige dieser Nebenwirkungen: unix.stackexchange.com/a/122624/27616 (von StephaneChazelas)
Olivier Dulac
Einverstanden - Ich wollte vorschlagen, dass es eine Schande ist, dass Sie keine Einstellungen (wie diese) gemäß dem Remote-Befehl (anstatt nach Host) hinzufügen können.
Toby Speight
28

Speichern des Passworts in einer geschützten Optionsdatei

Wenn Sie [*] der Sicherheit des Remotecomputers vertrauen können , können Sie das Kennwort in einer ordnungsgemäß geschützten Optionsdatei speichern, wie im Kapitel Richtlinien für Endbenutzer für die Kennwortsicherheit des Handbuchs empfohlen , ohne dass Sie jeweils eine Nachricht senden sshoder eingeben müssen Zeit.

Insbesondere können Sie im Abschnitt [client] der Datei .my.cnfin Ihrem Ausgangsverzeichnis eine Zeile hinzufügen :

[client]
password=your_pass

Natürlich müssen Sie verhindern, dass diese Datei für andere als Sie selbst zugänglich ist, indem Sie den Dateizugriffsmodus auf 400 oder 600 einstellen, z

chmod 600 ~/.my.cnf

Dann kannst du sowas benutzen

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

Wo user110971ist der Benutzername Ihres Kontos?


Erzwingen, dass ssh eine Pseudotty ( ssh -t) zuweist

Dieses Problem tritt jedes Mal auf, wenn Sie einen Befehl senden sshund die Eingabe einfügen müssen, da standardmäßig sshkeine Pseudotty zugewiesen wird.

Sie können die Zuweisung von tty mit der Option erzwingen -t(bei Bedarf auch mehr als eine):

-t

Pseudotty-Zuweisung erzwingen. Hiermit können beliebige bildschirmbasierte Programme auf einem entfernten Rechner ausgeführt werden, was zB bei der Implementierung von Menüdiensten sehr hilfreich sein kann. Mehrere -tOptionen erzwingen die Zuweisung von tty, auch wenn ssh kein lokales tty hat.

Wie Sie lesen können diesen Debian Post (Jul_11_2008) etwa sudoist es ein altes Problem , das zu wiederholen liebt:

ssh user@server "sudo ls"  
password: password  

Und Passwort wird Ihnen angezeigt

Die Lösung besteht darin, ssh zu zwingen, eine Pseudotty mit dem Flag -t zuzuweisen:

ssh -t user@server sudo ls

Hinweis:

[*] Wenn Sie sich darauf verlassen können, dass das Kennwort in einer Datei gespeichert ist, auf die nur Sie und root auf dem Arbeitsclient zugreifen können.
Wenn es möglich ist, den Remotecomputer unter einem anderen Betriebssystem neu zu starten oder die Festplatte zu entfernen, kann der Computer nicht als vollständig sicher angesehen werden. In diesem Fall ist die Datenbank selbst jedoch nicht sicher.

Hastur
quelle
1
Fügen Sie vielleicht eine Warnung hinzu, dass das Hinzufügen von "-t" nur für die interaktive Verwendung reserviert sein sollte, da es Nebenwirkungen hat. Für einen guten Überblick über einige dieser Nebenwirkungen: unix.stackexchange.com/a/122624/27616 (von StephaneChazelas)
Olivier Dulac
3

Die Mount-Option "hidepid" für Prozesse ist ebenfalls hilfreich. Dadurch werden Ihre Befehlszeilen in der Prozessliste für andere Benutzer unsichtbar. fstab Beispiel:

proc /proc proc hidepid=1 0 0
Bandie
quelle