GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo ejecutar ssh-keygen sin aviso

Ninguna de las respuestas hace exactamente lo que se espera. El comportamiento deseado:ejecutar ssh-keygen con la configuración predeterminada (como si solo enviáramos Enter) sin solicitar entrada alguna.

El comando a ejecutar es:

yes '' | ssh-keygen -N '' > /dev/null

omita>/dev/null si desea imprimir la salida.

Explicación:
yes y spams 'y', que ssh-keygen toma literalmente y crea las claves en $PWD/y y $PWD/y.pub . yes '' spams líneas vacías (Enter) que es lo que queremos. Especificar el archivo con -f ~/.ssh/id_rsa falla si el directorio .ssh no existe. La opción -t rsa no es necesaria si rsa es el tipo predeterminado (estamos ingresando spam de todos modos). La frase de contraseña no se lee desde la entrada estándar (en la que estamos enviando spam), sino directamente desde el teclado para que nada pueda interceptarla. Por este motivo, debe especificar -N '' para la frase de contraseña vacía.


Para mí, tuve que usar una combinación de la respuesta de @Lukasz y la de @Juan, al usar el comando ssh

ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'

Si no desea solicitar al usuario un archivo en el que guardar la clave, puede agregar el indicador de salida del archivo -f al comando.

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

De esta forma, no se solicitará al usuario ninguna entrada, a menos que id_rsa los archivos ya existen.


Necesitamos lograr dos pasos automáticamente:

  1. Ingrese una frase de contraseña . Utilice el -N bandera (cadena vacía para este ejemplo):

    ssh-keygen -t rsa -N ''

  2. Sobrescribir el archivo clave :

Usa -f para ingresar la ruta (en este ejemplo id_rsa ) más una cadena aquí para responder a la siguiente pregunta:

ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1

O, bajo un bash como shell, si ciertamente quieres sobrescribir el anterior , use solo una cadena aquí para alimentar el comando con toda la necesidad de entrada :

ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1

Desde ssh-keygen hombre página:

  -N new_passphrase provides the new passphrase.
  -q                silence ssh-keygen.
  -f filename       specifies the filename of the key file.

Explicación paso a paso

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):

1 ) Para evitar ingresar la clave, use -f :

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?

ATENCIÓN :Si no le importa el nombre del archivo RSA y ciertamente desea sobrescribir el anterior, consulte las instrucciones debajo del punto cuatro.

2 ) Ahora debemos responder "y " automáticamente a la pregunta de sobrescritura (utilicemos una cadena aquí para ese trabajo):

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):

3 ) Finalmente vamos a usar el -N bandera para ingresar un pase nulo:

$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|  .              |
|   o .           |
|  +   *    =     |
| +.  + BSo= o    |
|...o.+o+XO...    |
|.. .o.E==+B. .   |
|o . ...=.o...    |
|.+o.  o     ..   |
+----[SHA256]-----+

4 ) Pelota adicional , limpie la salida, solo verifique el código de retorno:

$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0

Una ruta alternativa para sobrescribir el archivo RSA anterior (no se necesita el indicador -f)

NOTA :Solo bash como conchas.

Si no le importa el nombre RSA y solo desea sobrescribirlo, debemos responder estas dos preguntas automáticamente:

  1. Introduzca el archivo en el que guardar la clave:/example/path/.ssh/id_rsa ya existe.

  2. ¿Sobrescribir (sí/no)?

Si hacemos esto a mano, para la primera pregunta solo tenemos que pulsar enter , y para el segundo, escriba y y presiona enter .

Podemos simular estas acciones usando la siguiente here-string :

$'\ny'

Del bash página man:

Las palabras de la forma $'cadena' se tratan de forma especial. La palabra se expande a "cadena", con caracteres de escape de barra invertida reemplazados según lo especificado por el estándar ANSI C.

\n nueva línea

Entonces, si usamos od para analizar nuestra cadena:

cat - <<< $'\ny' | od -c
0000000  \n   y  \n

Vemos que estamos obteniendo justo lo que necesitamos para responder las preguntas.

Los puntos 1 y 2 se pueden resumir en :

ssh-keygen -q -t rsa  <<< $'\ny'

Y el comando final será:

$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0

Felicitaciones

@lukasz-dynowski, @redochka, @mellow-yellow, @yeti y el resto de la gente en este hilo.


Linux
  1. ssh-keygen:cómo configurar una clave rsa con un determinado nombre de usuario

  2. Cómo ejecutar el archivo python en linux

  3. ¿Cómo ejecutar un script bash?

  4. ¿Cómo ejecutar un archivo PL en Linux?

  5. ¿Cómo eliminar un archivo sin usar rm?

Cómo personalizar Bash Prompt en Linux

Cómo ejecutar un comando de Shell con Python

¿Cómo apagar sin el aviso de confirmación?

¿Cómo ejecutar un comando en un script de Shell?

Cómo ejecutar SCP sin interrupción de solicitud de contraseña en Linux

Cómo ejecutar un archivo sin extensión .sh en shell