Automatisez ssh-keygen -t rsa pour qu'il ne demande pas de phrase de passe

164

J'ai besoin d'automatiser ssh-keygen -t rsasans mot de passe, c'est-à-dire entrer à l'invite.
Comment puis-je faire cela à partir d'un script shell?

Tampa
la source

Réponses:

230

Pour générer une paire de clés SSH sans être invité à entrer une phrase de passe, vous pouvez effectuer les opérations suivantes:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
la source
2
A travaillé pour moi! Github a toujours demandé un mot de passe sans l'option -N même lorsque vous n'entrez pas de mot de passe après l'invite "Enter passphrase (vide pour aucune phrase de passe)"
Hollerweger
4
Sur RHEL 6, j'ai eu cette erreur: " ssh-keygen: option requires an argument -- N" :(
Anthony O.
1
OK, c'est parce que j'ai utilisé la dzdocommande devant, alors j'ai dû écrire:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Il semble que l'espace séparant l'option et la phrase de passe vide -N ''est significatif. Quand j'ai ajouté l'espace, cela a réussi!
GH05T
33

Si vous devez le faire à partir de PowerShell dans Windows, utilisez:

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

notez que vous devez également vous assurer que le répertoire git bin est dans votre chemin:

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

$env:path += ";$sshPath"

Ensuite, pour l'utiliser dans PoshGit, c'est juste:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
la source
Merci pour cela. BTW, git\usr\binest le répertoire correct.
majkinetor le
4
Cela ne fonctionne pas pour moi. J'obtiens une erreur "La clé d'enregistrement" mykey "a échoué: phrase de passe trop courte (minimum quatre caractères)". J'ai dû changer les guillemets doubles / simples, par exemple ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen
1
@AaronJensen pareil pour moi. Merci pour le correctif. J'ai utilisé'""'
Trevor Sullivan
@AaronJensen Merci! '""'est la seule variante qui a fonctionné pour moi.
Somnium
@ Daniel-Little Je ne trouve pas de module PoshGit, le seul que je trouve avec ce nom est posh-git qui ne semble pas avoir cette cmdlet. Avez-vous plus d'informations à ce sujet?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
la source
Cette réponse est essentiellement copier et coller de la réponse par Shamoon
oᴉɹǝɥɔ
@ oᴉɹǝɥɔ La réponse de Shamoon ne spécifie pas explicitement le chemin d'accès à la clé privée.
GMaster
11

Juste une correction pour la réponse 2 ... J'ai découvert sur mon système OL et RHEL que le nom du fichier devrait être id_rsa et non id.rsa.

Ainsi, sur un système OL ou RHEL, la commande serait:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
la source
2
D'après ce que j'ai compris, id_rsac'est le nom de fichier par défaut pour une clé RSA, donc si vous souhaitez vous en tenir à la valeur par défaut, vous n'êtes pas obligé d'utiliser explicitement l' -foption.
danidemi
3
@danidemi alors que vous avez raison de dire que c'est la valeur par défaut, une des raisons de spécifier l' -foption est que vous puissiez l'exécuter dans un script. Vous pouvez simplement réaffirmer la valeur par défaut pour désactiver l'invite suivante.
Tristan Reid
9

Qu'en est-il de :

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

Comme indiqué dans 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.

(soit avec openssh-clientpaquet dans Debian 9.4 étirement: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
la source
A travaillé pour moi merci. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster
0

J'avais besoin d'automatiser dans un script bash la commande ssh-keygen et la réponse finale qui me convient bien:

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

La commande echo avec -e interprète "\ n" comme une touche Entrée, mais ne fonctionne pas avec la phrase de passe. Puis en utilisant l'option -N "" (phrase de passe vide) le mot de passe sera vide et ne demandera rien. &> / dev / null enverra les 'stdout' et 'stderr' à / dev / null afin que rien ne soit affiché sur l'écran.

mponceantolin
la source
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
la source