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, sshpass
aber 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 sshpass
das Passwort in angezeigt wird ps
, was ein No-Go ist. Ich kann auch keinen direkten Alias ssh
für so etwas sshpass ... ssh
erstellen, 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 sshpass
mit 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
.
Antworten:
sshpass
muss das Passwort nicht in der ps anzeigen. Es könnte eine Umgebungsvariable sein:oder aus einer Datei:
quelle
-d<fd>
sollte sicherer sein - es ist jedoch schwierig, sie von bash aus zu verwenden, ohne sie zu verwendenmkfifo
(was zumindest ein theoretisches Angriffsfenster ergibt) oder das Kennwort weiterzuleitenstdin
(was Ihre interaktive SSH-Shell beschädigen würde). So etwas wie Perl oder Python (oder C) kann es wahrscheinlich sauberer machen.sshpass
aber 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?ps
kann Umgebungsvariablen auflisten (Umgebungsvariablen und Befehlszeilenargumente sind nur zwei parallele Eingabepfade zu einer ausführbaren Datei).Mein sshpass hat eine Option
-f
zum Lesen aus einer Datei. Mit Bash-Prozess-Substitution können Sie dies also tunquelle
Am Ende bin ich einen anderen Weg gegangen, weil ich
sshpass
nicht mit dem Setup meiner Arbeit gearbeitet habe und keinen anderen Befehl zum Anmelden verwenden wollte. Ich habe eine Kombination ausexpect
dem Parameter ssh configLocalCommand
und 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:
Richten Sie einen SSH-Host ein, z. B.
Host work
mit einemHostName
, der auf meinen Computer zeigt, zHostName localhost
Fügen Sie das
PermitLocalCommand yes
undLocalComamnd <path to my expect script>; kill $PPID
zurHost
Konfiguration hinzuVerwenden Sie das Expect-Skript, um:
Führen Sie mein Knotenskript aus, das mein Kennwort abruft und in einer Variablen speichert
Verwenden Sie dieses gespeicherte Passwort während der Erwartung und interagieren Sie dann (siehe unten).
Wenn die SSH-Sitzung beendet ist,
LocalCommand
wird die ausgeführtkill $PPID
, wodurch ich zu meiner ursprünglichen Terminalsitzung zurückkehre.Hier ist mein Beispielskript
expect
:quelle
Beantwortung der ursprünglichen Frage zur Automatisierung und Beseitigung von Tastenanschlägen:
Basierend auf Ihrem Kommentar:
Definieren Sie einen Alias (zum Beispiel in Bash):
Und verwenden Sie es als regulären
ssh
Anruf.quelle
ps
?sshpass
das Passwort eingegeben wirdps
, was nicht machbar ist, alsosshpass
nicht funktioniert.