Ssh-keygen automatizado sin frase de contraseña, ¿cómo?


86

Me gustaría hacer un script automatizado que llame ssh-keygeny cree algunos pares de claves pub / privados que usaré más adelante. En principio todo funciona bien con ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... excepto que me pide la frase de contraseña que cifraría las claves. Esto hace que, en la actualidad, la automatización sea difícil.

Podría proporcionar una frase de contraseña a través del argumento de la línea de comandos -N thepassphrase, así que para mantener el símbolo de aparecer. Aún así, ni siquiera deseo tener las claves, adicionalmente aseguradas por cifrado , y quiero que los pares de claves sean de texto sin formato.

¿Cuál es la (la mejor) solución a este problema?

La -qopción que supuestamente significa "silencioso / silencioso" todavía no evita la interacción de frase de contraseña. Además no he encontrado algo como esto
ssh-keygen ...... -q --no-passphrase

Por favor, no comience a predicar sobre mí ni a exponerme sobre los pros y los contras de la "frase de contraseña faltante", soy consciente de eso. En la forma interactiva (no como una secuencia de comandos), el usuario puede simplemente presionar [ENTER] dos veces y la clave se guardará como texto sin formato. Esto es lo que quiero lograr en un script como este:

#! / bin / bash

comando1
comando2
var = $ (comando3)

# esto no debería detener el script y pedir contraseña
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Respuestas:


105

Esto evitará que aparezca el mensaje de frase de contraseña y establecerá el par de claves para que se almacene en texto sin formato (que por supuesto conlleva todas las desventajas y riesgos de eso):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
Esto funciona. Sin /tmp/sshkeyembargo, en caso de que ya exista, se obtiene un mensaje de sobrescritura. Esto puede evitarse mediante redireccionamiento / cierre de stdin, por ejemplo, mediante la adición 0>&-.
maxschlepzig

34

La forma más simple que encontré para hacer lo que quieres es esto (ejemplo usando el nombre de archivo predeterminado)

    cat /dev/zero | ssh-keygen -q -N ""

Si el ~/.ssh/id_rsaarchivo ya existe, el comando se cerrará sin modificar nada.

Si no, obtienes una clave nueva, en ese nombre de archivo.

De cualquier manera, no ha sobrescrito nada, y sabe que al final tiene una clave.


confirmado: en lubuntu 14.04.2
user77115

Si realmente quiere que sea silencioso, canalice la salida a / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg

En (ciertamente antiguo) SLES 11, el comando anterior no produce una clave. yes "" | ssh-keygen -N "" >&- 2>&-Sin embargo, funciona bien y no genera nada (ya sea que exista o no un archivo de claves), y no sobrescribe un archivo de claves previamente existente.
zrajm

Verificado en Ubuntu de confianza (14.04)
Binita Bharati

2
¿Por qué gato / dev / cero?
maxschlepzig


5

Puede usar esperar para enviar el "enter" por usted

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Pero tenga en cuenta que si el archivo / tmp / sshkey ya existe, fallará porque la salida del comando será diferente.


1
Gracias por la contribucion. la expectativa parece incluso más versátil para problemas del mismo tipo ... bueno, aquellos en los que las secuencias de comandos y la interacción del usuario entrarían en conflicto. Seré consciente del posible conflicto de que / tmp / sshkey ya existe y lo comprobaré antes de usar su comando.
humanityANDpeace

2

Hice un eco simple antes de ssh-keygen. Entoncessu - <user> -c "echo |ssh-keygen -t rsa"

Esto fue probado en Redhat 6


No creo que esta sea la mejor respuesta, pero creo que tampoco hay ninguna razón para rechazar, muchachos.
cubuspl42

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.