Automatice ssh-keygen -t rsa para que no solicite una frase de contraseña

164

Necesito automatizar ssh-keygen -t rsasin una contraseña, es decir, ingresar en el indicador.
¿Cómo puedo hacer eso desde un script de shell?

Tampa
fuente

Respuestas:

230

Para generar un par de claves SSH sin que se le solicite una frase de contraseña, puede hacer lo siguiente:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
fuente
2
¡Trabajó para mi! Github siempre solicitó una contraseña sin la opción -N, incluso cuando no se ingresa una contraseña después del mensaje "Ingrese la frase de contraseña (vacía para ninguna frase de contraseña)"
Hollerweger
44
En RHEL 6, recibí este error: " ssh-keygen: option requires an argument -- N" :(
Anthony O.
1
OK, esto fue porque usé el dzdocomando delante de él, así que tuve que escribir:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Parece que el espacio que separa la opción y la frase de contraseña vacía -N ''es significativo. Cuando agregué el espacio tuvo éxito!
GH05T
33

Si necesita hacer esto desde PowerShell en Windows use:

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

Tenga en cuenta que también debe asegurarse de que el directorio git bin esté en su ruta:

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

$env:path += ";$sshPath"

Luego, para usarlo en PoshGit es solo:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
fuente
Gracias por esto. Por cierto, git\usr\bines el directorio correcto.
majkinetor
44
Esto no funciona para mi. Recibo un error "Error al guardar la clave" mykey ": frase de contraseña demasiado corta (mínimo cuatro caracteres)". Tuve que cambiar las comillas dobles / simples, por ejemplo ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen el
1
@AaronJensen igual para mí. Gracias por el arreglo. Solía'""'
Trevor Sullivan el
@AaronJensen ¡Gracias! '""'Es la única variante que funcionó para mí.
Somnium
@ Daniel-Little No puedo encontrar un módulo PoshGit, el único que encuentro con este nombre es posh-git que no parece tener este cmdlet. ¿Alguna información más sobre esto?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
fuente
Esta respuesta es esencialmente copiar y pegar de la respuesta de Shamoon
oᴉɹǝɥɔ
@ oᴉɹǝɥɔ La respuesta de Shamoon no especifica explícitamente la ruta a la clave privada.
GMaster
11

Solo una corrección para responder 2 ... descubrí en mi sistema OL y RHEL que el nombre del archivo debería ser id_rsa no id.rsa.

Entonces, en un sistema OL o RHEL, el comando sería:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
fuente
2
Según tengo entendido, id_rsaes el nombre de archivo predeterminado para una clave RSA, por lo que si desea mantener el valor predeterminado, no está obligado a utilizar explícitamente la -fopción.
danidemi
3
@danidemi, mientras tiene razón en que es el valor predeterminado, una razón para especificar la -fopción es para que pueda ejecutar esto en un script. Puede reafirmar el valor predeterminado para deshabilitar la solicitud posterior.
Tristan Reid
9

Qué pasa :

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

Como se señala en 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.

(es decir, con openssh-clientel paquete en Debian 9.4 estiramiento: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
fuente
Trabajó para mí, gracias. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster
0

Necesitaba automatizar en un script bash el comando ssh-keygen y la respuesta final que me funciona bien:

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

El comando echo con -e interpreta "\ n" como una tecla Intro, pero no funciona con la frase de contraseña. Luego, utilizando la opción -N "" (frase de contraseña vacía) la contraseña estará vacía y no pedirá nada. &> / dev / null enviará 'stdout' y 'stderr' a / dev / null para que no se imprima nada a través de la pantalla.

mponceantolina
fuente
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
fuente