ssh funktioniert nicht mit yes

ssh funktioniert nicht mit yes

Ich musste kürzlich einen Sonderfall lösen, bei dem ich einem Benutzer eine Reihe von Server-Fingerabdrücken hinzufügen musste known_hosts(die Autorisierung erfolgt mit einem Schlüsselpaar). Ich dachte, die einfachste Lösung wäre, einfach anzurufen

yes yes | ssh *login@host*

. Überraschenderweise (zumindest für mich) funktioniert das nicht: Es sshwird immer noch gefragt, ob der Fingerabdruck hinzugefügt werden soll, und es ist eine manuelle Eingabe erforderlich.

Meine Frage ist: Warum ist das so?welcher Mechanismus liegt diesem Verhalten zugrunde??

Antwort1

Für diese Eingabeaufforderung sshverwenden Sie nicht diestdinundstdoutStreams – um zu vermeiden, dass die Eingabeaufforderung mit der Eingabe/Ausgabe des Remote-Befehls verwechselt wird. (Stellen Sie sich vor ssh host cat something.tar | tar x, Sie führen aus und werden plötzlich tar xüber Müll in der Eingabe beschwert.)

Stattdessen sshöffnet es das spezielle Gerät /dev/tty, das immer auf sein „steuerndes Terminal“ zeigt, schreibt die Eingabeaufforderung dorthin und liest die Antwort von dort.


Speziell für Ihr Problem bietet OpenSSH ssh-keyscanein Tool zum Abrufen der öffentlichen Schlüssel mehrerer Server gleichzeitig.

ssh-keyscan host1 host2 host3 >> ~/.ssh/known_hosts

(Ich bin nicht sicher known_hosts, ob Sie meinten oder es authorized_keyshier wirklich brauchten.)


Im Allgemeinen expectkann das Dienstprogramm zum Automatisieren von Programmen verwendet werden, die ihre E/A normalerweise über tty durchführen.

verwandte Informationen