Automatización de pulsaciones de teclas "enter" para el script bash que genera claves ssh

101

Me gustaría crear un script, que simplemente se ejecuta ssh-keygen -t rsa. Pero, ¿cómo pasar 3 veces para entrar?

Sławosz
fuente

Respuestas:

217

Tratar:

ssh-keygen -t rsa -N "" -f my.key

-N "" le dice que use una frase de contraseña vacía (lo mismo que dos de las entradas en un script interactivo)

-f my.keyle dice que almacene la clave en my.key(cambie como mejor le parezca).

Todo se ejecuta sin que tenga que proporcionar ninguna tecla de entrada :)

Para enviar entradas a un script interactivo:

echo -e "\n\n\n" | ssh-keygen -t rsa
Rudu
fuente
4
Es la respuesta correcta, pero aún me gustaría saber cómo presionar enter más de una vez, en otro script.
Sławosz,
3
Seguro: se actualizó la respuesta para incluir cómo enviar nuevas líneas a un script.
Rudu
2
echo -e "\ n \ n \ n" | sshkeygen -t rsa no me funciona, ¿puedes probarlo tú mismo? Pasa solo primero ingresa. Pero en otro script simple funciona.
Sławosz
1
Lo probé antes de publicarlo, funciona bien, aunque parece que el tablero ssh-keygense cayó, ¿lo agregaste nuevamente? {editado} Además, no puede ejecutar el script más de una vez, cambia las preguntas para confirmar que desea sobrescribir el _rsaarchivo de claves existente (por lo que es necesario proporcionar ay o n)
Rudu
13
Recomendaría usar en yes ""lugar de echo -e "\n\n\n"( yesgenera cualquier argumento dado [o "y" por defecto] en infinito - perfecto para estas situaciones donde uno solo quiere dar una respuesta "sí" a lo que sea que un programa pueda solicitar). yeses más corto y debería ssh-keygenagregar una pregunta, que también será respondida automáticamente en. :)
zrajm
22

una versión con contraseña es:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • la -q es para silencio

La fuente es http://linux.die.net/man/1/ssh-keygen

Michel Marro
fuente
4
Use -P para una frase de contraseña existente, use -N para una nueva
brianlmerritt
1

De acuerdo con Michel Marro, excepto que necesita algo más: si el archivo ya existe, seguirá siendo interactivo y le preguntará si debe sobrescribirlo.

Utilice la respuesta de esta pregunta .

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

La redirección a nulo es necesaria para silenciar el mensaje de sobrescritura.

shamox
fuente
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
fuente
¿Eh? En realidad, esto tiene menos líneas nuevas que una de las respuestas que afirma que no funciona (y eso es en el subconjunto de plataformas donde echo -eemite algo diferente -e, que no ssh-keygenestá disponible en todas partes ).
Charles Duffy
... para que quede claro, hago uso de producción ssh-keygen -N ''como parte de un procedimiento de instalación automatizado, y no lee stdin en absoluto, por lo que no hay necesidad de echo( ninguna echo variante) conectada a él. (Por supuesto, creo que stdin está conectado /dev/nullen mi caso de uso de producción; bien podría haber un comportamiento diferente cuando está conectado a un TTY, pero la mejor respuesta es en </dev/nulllugar de echo ... |)
Charles Duffy
1
Me solicita un nombre de archivo: $ 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

Se recomienda utilizar ed25519 por motivos de seguridad y rendimiento.

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

aquí

-o Formato de clave OpenSSH en lugar de PEM anterior (necesita OpenSSH 6.5+)

-a Número de pruebas de primalidad durante la selección de candidatos DH-GEX

-t Tipo de clave (ed25519, RSA, DSA, etc.)

-f /mypath/bla La ruta y el nombre del archivo de salida

-N "" Usar fase de paso vacía

y yes "y"sin interacción.

Generará dos archivos

/mypath/bla
/mypath/bla.pub

donde el blaarchivo es privado y bla.pubpúblico.

Madan Sapkota
fuente