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?

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 ''

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"

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 ''

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 ''

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)


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.