
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 ssh
wird 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 ssh
verwenden 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-keyscan
ein 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_keys
hier wirklich brauchten.)
Im Allgemeinen expect
kann das Dienstprogramm zum Automatisieren von Programmen verwendet werden, die ihre E/A normalerweise über tty durchführen.