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?

Sławosz
quelle

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
Rudu
quelle
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
22

Eine Version mit Passphrase lautet:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • das -q ist für still

Quelle ist http://linux.die.net/man/1/ssh-keygen

Michel Marro
quelle
4
Verwenden Sie -P für eine vorhandene Passphrase, verwenden Sie -N für eine neue
brianlmerritt
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.

Shamox
quelle
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
quelle
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.

Madan Sapkota
quelle