Wie würde ich über SSH in einer Zeile eine Verbindung zu einem anderen Computer herstellen? In ssh host@IP
diesem Fall müsste ich das Passwort in der zweiten Zeile eingeben. Ich dachte, dass ich so etwas tun könnte ssh host@IP | echo password
, aber das gibt das Passwort ein, bevor ich nach dem Passwort frage.
27
ssh
das Passwort von stdin gelesen würde,echo password | ssh host@IP
würde es funktionieren, aber normalerweise versucht SSH, direkt vom Terminal zu lesen.Antworten:
Sie sollten SSH-Schlüssel verwenden, um sich zu authentifizieren, anstatt Ihr Kennwort in die Befehlszeile einzugeben, da es äußerst unsicher ist.
Sobald Sie Ihre SSH-Schlüssel eingerichtet haben, müssen Sie nur noch den folgenden Befehl eingeben:
und ohne etwas anderes einzugeben, wirst du automatisch eingeloggt.
Kopieren Sie den öffentlichen SSH-Schlüssel von macOS nach Mac / FreeBSD / Linux
Dies setzt voraus, dass Sie über eine kennwortbasierte Authentifizierung (Eingabe eines Kennworts) auf den Remote-Server zugreifen können und dass Sie bereits Ihr privates / öffentliches Schlüsselpaar erstellt haben (falls nicht, siehe unten). Im folgenden Beispiel verwenden wir RSA. Kopieren wir zunächst den Schlüssel (beachten Sie, dass das "Home" -Verzeichnis sich zwischen MacOS, Linux, BSD usw. unterscheidet):
Verwendung von SCP:
Oder ziehen Sie einfach die Datei an
authorized_keys
(ich bevorzuge diese Methode):(Ihr Schlüsselname kann abweichen) Wenn das Verzeichnis .ssh auf dem Remote-Server nicht vorhanden ist, müssen Sie sich anmelden und es erstellen.
Jetzt wurde der Schlüssel vom Mac auf den Remote- Server kopiert . Richtigen Sie die Berechtigungen für den öffentlichen SSH-Schlüssel auf dem Remoteserver ein:
Fügen Sie als Nächstes den Schlüssel zur SSH-Datei authorized_keys hinzu, falls die Datei noch nicht vorhanden ist, und erstellen Sie sie.
Wenn die Datei
authorized_keys
in der Datei bereits vorhanden ist,~/.ssh
verwenden Sie den folgenden Befehl:Wenn die Datei nicht existiert, geben Sie die folgenden Befehle ein:
Generieren Sie einen öffentlichen / privaten SSH-Schlüssel unter macOS
Öffnen Sie das Terminal über Anwendungen -> Dienstprogramme -> Terminal
Verwenden Sie im Terminal den folgenden Befehl, um die Schlüsselerzeugung zu starten
Als Nächstes werden Sie aufgefordert, den Speicherort anzugeben, an dem Sie die private Schlüsseldatei erstellen möchten:
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (
/Users/username/.ssh/id_rsa
):Lassen Sie dieses Feld leer, um den Schlüssel am Standardspeicherort zu erstellen
/Users/username/.ssh/id_rsa
. Die öffentliche Schlüsseldatei wird am selben Speicherort und mit demselben Namen erstellt, jedoch mit der Erweiterung .PUB.Nachdem Sie aufgefordert werden, eine Passphrase zu wählen. Dies ist das optionale Kennwort , um den privaten Schlüssel zu verwenden.
Ihr SSH-Schlüssel wird generiert.
Denken Sie jetzt daran, wenn Sie ein Passwort eingeben, müssen Sie es jedes Mal eingeben, wenn Sie eine Verbindung herstellen. Das Dienstprogramm
ssh-agent
behält die Passphrase im Speicher, sodass Sie sie nicht jedes Mal manuell eingeben müssen, wenn Sie eine Verbindung herstellen, während Sie sich in derselben Sitzung befinden. Weitere Details finden Sie unterman ssh-agent
quelle
ssh-copy-id
ein nützliches Tool ist, um einige der oben genannten Vorgänge zu automatisieren.Es gibt verschiedene Möglichkeiten. Ihr Beispiel wird natürlich nicht funktionieren, aber Sie können mit dem
sshpass
Dienstprogramm etwas Ähnliches erreichen :Beachten Sie, dass dies nicht empfohlen wird, da
password
dies für andere Prozesse oder im Shell-Verlauf sichtbar ist.Eine viel bessere Möglichkeit ist es, die kennwortlose Authentifizierung mit SSH-Schlüsseln einzurichten. Zusamenfassend:
quelle
sshpass
wie Sie es empfohlen haben, aber es wurde der Befehl nicht gefunden.ps auxw | grep sshpass
, um anderen Benutzern das ssh-Passwort mitzuteilen.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Daszzzzzzzz
ist wörtlich; sshpass maskiert den Inhalt des Passworts. Vielleicht waren frühere Iterationen weniger datenschutzbewusst.Ich habe auch lange nach der Antwort darauf gesucht. Obwohl es unsicher ist und all diese Leute Sie auffordern, RSA-Schlüssel zu verwenden ( was eine sicherere und zuverlässigere Idee ist ), ist es durchaus möglich.
Verwenden Sie dazu ein Programm
expect
. Expect überwacht stdout (und ich denke stderr, wenn es richtig konfiguriert ist) für Sie, wartet auf bestimmte Nachrichten und antwortet auf diese mit Ausgabe. Erwarten Sie, dass es sich tatsächlich um eine Skriptsprache handelt, und als ich das Gleiche tat, fiel es mir aufgrund des Timings sehr schwer, mein eigenes Skript richtig zum Laufen zu bringen. Allerdings beinhaltet expect auch ein praktisches Hilfsprogramm namensautoexpect
.Mit autoexpect werden Sie überwacht und ein Erwartungsskript für Sie erstellt. Führen Sie einfach autoexpect und den gewünschten Befehl aus:
und mach was du normalerweise machst. Wenn Sie das Programm
exit
beenden (durch Eingabe der Shell ssh'd), wird das Skript generiert. Wenn Sie nicht möchten, dass sich das gesamte Skript, das Sie schreiben, in einem Expect-Skript befindet, können Sie das Skript von autoexpect (aufgerufenscript.exp
) bis zum Beenden bearbeiten , bevor Sie denexit
Befehl in die Shell eingeben . Die Zeile, die Sie verschieben möchten, um das Skriptende zu ändern, lautet:was bedeutet, dass das Dateiende erwartet wird. Hoffe das hilft!
quelle
Die Verwendung von
expect
ist einfach falsch, um sich für etwas anderes als in einer Testsuite bei einer ssh-Verbindung anzumelden.Was @ ben-a sucht, ist bereits in ssh implementiert. Der Trick ist, wie man es benutzt. Also los geht's:
ssh-keygen
. Verwenden Sie entweder ECDSA oder RSA als-t
(oder Typ) und für RSA 2048 oder 4096 als-b
(oder BITS-Länge). Dies sollte zum Zeitpunkt des Schreibens ausreichen. Verwenden Sie IMMER ein PASSWORT!ssh-copy-id
oder die oben genannte Methode, um auf dem Computer, auf dem Sie sich anmelden (auch bekannt als Server), die~/.ssh/authorized_keys
Datei zu erstellen. Darin befindet sich eine Kopie des soeben generierten öffentlichen Schlüssels.~/.ssh/config
. Wenn es nicht existiert, können Sie es erstellen.In dieser Datei fügen Sie Folgendes für Ihre Anforderungen hinzu
Sie können
ssh <name>
die Verbindung jetzt nur zum Einrichten verwenden, das Kennwort für Ihren Schlüssel wird jedoch weiterhin benötigt. Um dies zu lösen, verwenden Sie den für diesen Zweck entwickelten und mitgelieferten ssh-Agent. Um Ihren Schlüssel zum Agenten hinzuzufügen, verwenden Sie einfachssh-add <path to keyfile>
. Sie werden nach dem Kennwort gefragt, und der Schlüssel wird für diese Sitzung sicher gespeichert. Wenn der Fehler "Der ssh-Agent kann nicht gefunden werden" (oder ähnlich) angezeigt wird, bedeutet dies, dass der Agent wahrscheinlich noch nicht gestartet wurde. Sie können es für diese Sitzung mit startenssh-agent bash
. Dadurch wird eine neue Shell mit dem darin aktiven Agenten gestartet.Wenn Sie diese Schritte ausführen, erschweren Sie nicht nur den Identitätswechsel durch die Entführung Ihrer Anmeldeinformationen, sondern sorgen auch für eine ordnungsgemäße Benutzerfreundlichkeit (die einfacher zu verwenden ist als einfache Kennwörter).
quelle