Geben Sie das Passwort ohne Eingabe in SSH ein

7

Bei der Arbeit greife ich sowohl über SSH auf ein Remote-System als auch auf einige Webschnittstellen zu, die sich über LDAP anmelden. Ich verwende 1Kennwort, um meine Kennwörter zu verwalten, aber ich kann anscheinend keine einfache Möglichkeit finden, das Kennwort vom Kennwortmanager in SSH einzugeben. Ich habe gesehen, sshpassaber es kann das Passwort in anzeigen ps, was wirklich schlechte Sicherheit ist und auch in meinem Fall nicht funktioniert. Gibt es eine Möglichkeit, ein Passwort von einem externen Programm oder Skript direkt über SSH einzugeben, oder gibt es in SSH Funktionen, mit denen ich die Passwörter nutzen und synchron halten kann? B. eine Schlüsseldatei behalten, die ich für SSH entsperre, die dasselbe Kennwort hat und die jedes Mal aktualisiert wird, wenn ich das Kennwort aktualisiere. Hinweis Ich kann keine Schlüssel direkt zum Anmelden am System verwenden, da es nicht zur Unterstützung des Systems entwickelt wurde.

Bearbeiten: Ein Kommentator wies darauf hin, dass sshpassdas Passwort in angezeigt wird ps, was ein No-Go ist. Ich kann auch keinen direkten Alias sshfür so etwas sshpass ... ssherstellen, da ich mich immer noch bei Systemen anmelde, die Schlüssel verwenden.

Bearbeiten 2: Ich habe die Bestätigung erhalten, dass ein Passwort-Manager in Ordnung ist, und ich habe versucht, mich sshpassmit einem Dateideskriptor beim Server anzumelden, aber es scheint nicht zu funktionieren - anstatt mich zur Eingabe meines RSA-Tokens aufzufordern, habe ich bekomme einfach nichts, was mich denken lässt, dass es nicht den gleichen Code durchläuft und nicht akzeptiert sshpass.

Josh
quelle
Erstellen Sie eine Alias- / Shell-Funktion / ein Skript mit einem anderen Namen speziell für den einen Host.
Ilkkachu
Nein, soweit ich weiß. Es ist ein Regierungssystem und ich muss mich mit Passwort und RSA-Token anmelden.
Josh
Ich nehme an, sie darüber zu informieren, dass die Verwendung von Schlüsseln anstelle der Weitergabe des Kennworts über die Verbindung sicherer ist und dass Kennwörter ein inhärentes Sicherheitsrisiko darstellen, ist keine Option, oder?
Terdon
Ich bezweifle es ... Wenn es ein Unternehmen wäre, könnte ich mit einem IT-Mitarbeiter sprechen, aber es ist wahrscheinlich eine obligatorische Sache innerhalb der Regierung, RSA-Token und -Kennwort zu verwenden.
Josh
2
Serverseitige Kennwörter bieten dem Server die Möglichkeit, eine ausreichende Kennwortstärke zu erfordern und das Brute-Forcing zu begrenzen. Schlüssel nicht: Der Benutzer lässt den Schlüssel möglicherweise sogar unverschlüsselt. Passwörter können natürlich abgehört werden, aber auch die Passphrase, die den Schlüssel schützt. (Und jeder Software-Keylogger hätte wahrscheinlich genügend Zugriff, um auch die Schlüsseldatei zu kopieren.) Schlüssel sind nett, erfordern jedoch ein gewisses Maß an Vertrauen in den Benutzer und sein Gerät, was eine Sicherheitsrichtlinie wahrscheinlich nicht hat. ;) Die nächste Frage, die sich stellt, lautet: Ermöglicht die Richtlinie das Speichern des Kennworts auf einem Computer?
Ilkkachu

Antworten:

8

sshpassmuss das Passwort nicht in der ps anzeigen. Es könnte eine Umgebungsvariable sein:

SSHPASS=12345 sshpass -e ssh user@host

oder aus einer Datei:

sshpass -f /path/to/password_file ssh user@host
Jakuje
quelle
Die Verwendung -d<fd>sollte sicherer sein - es ist jedoch schwierig, sie von bash aus zu verwenden, ohne sie zu verwenden mkfifo(was zumindest ein theoretisches Angriffsfenster ergibt) oder das Kennwort weiterzuleiten stdin(was Ihre interaktive SSH-Shell beschädigen würde). So etwas wie Perl oder Python (oder C) kann es wahrscheinlich sauberer machen.
Nutzlos
Ja, dies ist keine sichere Lösung, aber immer noch besser als sie über die Befehlszeile zu schreiben. Die Verwendung eines separaten FD ist wahrscheinlich die beste Lösung für all die Fehler, die wir hier vorschlagen. Die Passwörter haben jedoch ihren Zweck, sodass die Warnung bezüglich der Passwortrichtlinie weiterhin gilt.
Jakuje
Ich habe es versucht, sshpassaber es scheint nicht zu funktionieren ... Ich denke, dass die Konfiguration auf dem Server nicht wie ein normales SSH-System eingerichtet ist (es ist ein RSA-Token erforderlich). Gibt es andere Lösungen, z. B. eine Schlüsseldatei mit meinem Kennwort, die ich entsperren und die SSH verwenden kann?
Josh
1
pskann Umgebungsvariablen auflisten (Umgebungsvariablen und Befehlszeilenargumente sind nur zwei parallele Eingabepfade zu einer ausführbaren Datei).
Strg-Alt-Delor
5

Mein sshpass hat eine Option -fzum Lesen aus einer Datei. Mit Bash-Prozess-Substitution können Sie dies also tun

sshpass -f <(myscript_call_1password) ssh host
meuh
quelle
0

Am Ende bin ich einen anderen Weg gegangen, weil ich sshpassnicht mit dem Setup meiner Arbeit gearbeitet habe und keinen anderen Befehl zum Anmelden verwenden wollte. Ich habe eine Kombination aus expectdem Parameter ssh config LocalCommandund einem Node-Skript verwendet, um mein Passwort zu erhalten. Siehe Ist es möglich, SSH in LocalCommand zu beenden? auch.

Im Wesentlichen lautet meine Lösung:

  1. Richten Sie einen SSH-Host ein, z. B. Host workmit einem HostName, der auf meinen Computer zeigt, zHostName localhost

  2. Fügen Sie das PermitLocalCommand yesund LocalComamnd <path to my expect script>; kill $PPIDzur HostKonfiguration hinzu

  3. Verwenden Sie das Expect-Skript, um:

    1. Führen Sie mein Knotenskript aus, das mein Kennwort abruft und in einer Variablen speichert

    2. Verwenden Sie dieses gespeicherte Passwort während der Erwartung und interagieren Sie dann (siehe unten).

  4. Wenn die SSH-Sitzung beendet ist, LocalCommandwird die ausgeführt kill $PPID, wodurch ich zu meiner ursprünglichen Terminalsitzung zurückkehre.

Hier ist mein Beispielskript expect:

set password [exec node <script>]
spawn -noecho ssh <work_host>
expect "Password"
send "${password}\n"
interact
Josh
quelle
-3

Beantwortung der ursprünglichen Frage zur Automatisierung und Beseitigung von Tastenanschlägen:

Ich habe gesehen, sshpassaber es erfordert die Eingabe des sshpassBefehls vor dem Ausführen ssh, was etwas unpraktisch ist.

Basierend auf Ihrem Kommentar:

Ich habe ein Skript, das mit der 1password-Datenbank kommuniziert, daher möchte ich das Skript und SSH integrieren.

Definieren Sie einen Alias ​​(zum Beispiel in Bash):

alias ssh='sshpass -p$(<your_script>) ssh'

Und verwenden Sie es als regulären sshAnruf.

Techraf
quelle
2
Wird das Passwort nicht immer noch sichtbar bleiben ps?
Shadur
@ Shadur Das kommt nicht in Frage.
Techraf
Es sollte sein.
Shadur
Bitte kommentieren Sie dann unter der Frage.
Techraf
1
Es ist nicht "ein paar Zeichen einzugeben ist unpraktisch", sondern ich muss meinen Passwort-Manager separat öffnen, das Passwort kopieren und es dann in das Terminal einfügen. Ich habe auch nicht bemerkt , dass sshpassdas Passwort eingegeben wird ps, was nicht machbar ist, also sshpassnicht funktioniert.
Josh