Automatisieren der Eingabetaste für das Bash-Skript zum Generieren von SSH-Tasten


101

Ich möchte ein Skript erstellen, das einfach ausgeführt wird ssh-keygen -t rsa. Aber wie geht man dreimal hinein?

Antworten:


217

Versuchen:

ssh-keygen -t rsa -N "" -f my.key

-N "" weist es an, eine leere Passphrase zu verwenden (das gleiche wie zwei der Eingaben in einem interaktiven Skript)

-f my.keyWeist es an, den Schlüssel darin zu speichern my.key( nach Belieben ändern).

Das Ganze läuft, ohne dass Sie Eingabetasten eingeben müssen :)

So senden Sie Eingaben in ein interaktives Skript:

echo -e "\n\n\n" | ssh-keygen -t rsa

4
Es ist die richtige Antwort, aber ich würde immer noch gerne wissen, wie man mehr als einmal die Eingabetaste drückt - in einem anderen Skript.
Sławosz

3
Sicher - die Antwort wurde aktualisiert und enthält nun auch Informationen zum Senden von Zeilenumbrüchen an ein Skript.
Rudu

2
echo -e "\ n \ n \ n" | sshkeygen -t rsa arbeitet nicht für mich, kannst du es selbst versuchen? Es wird nur zuerst eingegeben. Aber auf einem anderen, einfachen Skript funktioniert es.
Sławosz

1
Ich habe es getestet, bevor ich es gepostet habe - es funktioniert einwandfrei, obwohl es so aussieht, als wäre der Bindestrich von ssh-keygenfallen gelassen worden - hast du das wieder hinzugefügt? {bearbeitet} Außerdem - Sie können das Skript nicht mehr als einmal ausführen - werden die Fragen geändert, um zu bestätigen, dass Sie die vorhandene _rsaSchlüsseldatei überschreiben möchten (daher müssen ay oder n angegeben werden)
Rudu

13
Ich würde die Verwendung von yes ""anstelle von empfehlen echo -e "\n\n\n"( yesgibt jedes Argument aus, das [oder "y" standardmäßig] im Unendlichen angegeben wird - perfekt für Situationen, in denen nur eine "Ja" -Antwort auf die von einem Programm angeforderten Antworten gegeben werden soll). yesist kürzer und sollte ssh-keygenjemals eine Frage hinzufügen, die automatisch auch beantwortet wird. :)
Zrajm


1

Stimmen Sie Michel Marro zu, außer dass es noch etwas mehr braucht: Wenn die Datei bereits vorhanden ist, wird sie weiterhin interaktiv sein und fragen, ob sie überschrieben werden muss.

Verwenden Sie die Antwort auf diese Frage .

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

Die Umleitung auf null ist erforderlich, um die Überschreibungsnachricht zum Schweigen zu bringen.


0
echo -e "\n"|ssh-keygen -t rsa -N ""

Eh? Dies hat tatsächlich weniger Zeilenumbrüche als eine der Antworten, von denen Sie behaupten, dass sie nicht funktionieren (und das ist auf der Untergruppe von Plattformen, auf denen echo -eetwas anderes als -eüberhaupt ausgegeben wird , was nicht überall ssh-keygenverfügbar ist).
Charles Duffy

... um es klar zu sagen, ich benutze die Produktion ssh-keygen -N ''als Teil eines automatisierten Installationsvorgangs und es liest überhaupt nicht stdin, so dass es nicht notwendig ist, die echo( irgendeine echo Variante) darin zu leiten. (Zugegeben, ich glaube, stdin ist /dev/nullin meinem Produktionsanwendungsfall damit verbunden; es könnte durchaus ein anderes Verhalten geben, wenn es an ein TTY angehängt wird, aber die bessere Antwort ist </dev/nulleher als echo ... |)
Charles Duffy

1
Es fordert mich zur Eingabe eines Dateinamens auf: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):
Mannix

0

Es wird empfohlen, ed25519 für Sicherheit und Leistung zu verwenden.

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

Hier

-o OpenSSH-Schlüsselformat anstelle älterer PEM (benötigt OpenSSH 6.5+)

-a Anzahl der Primalitätstests beim Screening von DH-GEX-Kandidaten

-t Schlüsseltyp (ed25519, RSA, DSA usw.)

-f /mypath/bla Der Pfad und Name der Ausgabedatei

-N "" Verwenden Sie eine leere Passphase

und yes "y"für keine Interaktion.

Es werden zwei Dateien generiert

/mypath/bla
/mypath/bla.pub

wo die blaDatei privat und bla.puböffentlich ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.