Automatisieren Sie ssh-keygen -t rsa, damit keine Passphrase abgefragt wird

164

Ich muss ssh-keygen -t rsaohne Passwort automatisieren , dh an der Eingabeaufforderung eingeben.
Wie kann ich das mit einem Shell-Skript machen?

Tampa
quelle

Antworten:

230

Um ein SSH-Schlüsselpaar zu generieren, ohne zur Eingabe einer Passphrase aufgefordert zu werden, haben Sie folgende Möglichkeiten:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
quelle
2
Hat für mich gearbeitet! Github fragte immer nach einem Passwort ohne die Option -N, auch wenn nach der Eingabeaufforderung "Passphrase eingeben (leer für keine Passphrase)" kein Passwort eingegeben wurde
Hollerweger
4
Auf RHEL 6 bekam ich diesen Fehler: " ssh-keygen: option requires an argument -- N" :(
Anthony O.
1
OK, das lag daran, dass ich das dzdoKommando davor verwendet habe, also musste ich schreiben:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Es scheint, dass der Abstand zwischen der Option und der leeren Passphrase von -N ''Bedeutung ist. Als ich den Platz hinzufügte, war es erfolgreich!
GH05T
33

Wenn Sie dies in Windows unter PowerShell tun müssen, verwenden Sie:

ssh-keygen -f $Name -t rsa -N '""'

Beachten Sie, dass Sie auch sicherstellen müssen, dass sich das Git-Bin-Verzeichnis in Ihrem Pfad befindet:

$sshPath = "<path>\git\bin\"

$env:path += ";$sshPath"

Um es dann in PoshGit zu verwenden, ist es nur:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
quelle
Danke dafür. Übrigens git\usr\binist das richtige Verzeichnis.
Majkinetor
4
Das funktioniert bei mir nicht. Ich erhalte die Fehlermeldung "Schlüssel speichern" mykey "fehlgeschlagen: Passphrase zu kurz (mindestens vier Zeichen)". Ich musste die doppelten / einfachen Anführungszeichen wechseln, z ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen
1
@ AaronJensen gleich für mich. Danke für die Fehlerbehebung. Ich benutzte'""'
Trevor Sullivan
@ AaronJensen Danke! '""'ist die einzige Variante, die bei mir funktioniert hat.
Somnium
@ Daniel-Little Ich kann kein Modul PoshGit finden, das einzige, das ich mit diesem Namen finde, ist posh-git, das dieses Cmdlet nicht zu haben scheint. Noch mehr Infos dazu?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
quelle
Diese Antwort ist im Wesentlichen Kopieren und Einfügen aus der Antwort von Shamoon
oᴉɹǝɥɔ
@ oᴉɹǝɥɔ Die Antwort von Shamoon gibt den Pfad zum privaten Schlüssel nicht explizit an.
GMaster
11

Nur eine Korrektur, um Antwort 2 zu beantworten ... Ich habe auf meinem OL- und RHEL-System herausgefunden, dass der Dateiname id_rsa und nicht id.rsa sein sollte.

Auf einem OL- oder RHEL-System wäre der Befehl also:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
quelle
2
Soweit ich verstanden habe, id_rsaist dies der Standarddateiname für einen RSA-Schlüssel. Wenn Sie sich also an den Standard halten möchten, müssen Sie die -fOption nicht explizit verwenden .
Danidemi
3
@danidemi Während Sie Recht haben, dass dies die Standardeinstellung ist, besteht ein Grund für die Angabe der -fOption darin, dass Sie dies in einem Skript ausführen können. Sie können einfach die Standardeinstellung erneut bestätigen, um die nachfolgende Eingabeaufforderung zu deaktivieren.
Tristan Reid
9

Wie wäre es mit :

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

Wie in man ssh-keygen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
      -q      Silence ssh-keygen.

(das heißt mit openssh-clientPaket in Debian 9.4 Stretch: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
quelle
Arbeitete für mich danke. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster
0

Ich musste den Befehl ssh-keygen und die endgültige Antwort, die für mich gut funktioniert, in einem Bash-Skript automatisieren:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

Der Echo-Befehl mit dem -e interpretiert "\ n" als Eingabetaste, funktioniert jedoch nicht mit der Passphrase. Wenn Sie dann die Option -N "" (leere Passphrase) verwenden, ist das Passwort leer und fordert nichts an. &> / dev / null sendet 'stdout' und 'stderr' an / dev / null, sodass nichts über die Anzeige gedruckt wird.

mastyleki
quelle
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
quelle