ssh: acepta llaves automáticamente

171

Escribí este pequeño script de utilidad:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Cuando se agrega un nuevo servidor a $SERVER_LIST , el script se detiene con:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

He intentado yes :

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

sin suerte.

¿Hay alguna manera de parametrizar ssh para aceptar automáticamente cualquier nueva clave?

    
pregunta Adam Matan 18.04.2012 - 11:11

4 respuestas

185

Utilice la opción StrictHostKeyChecking, por ejemplo:

ssh -oStrictHostKeyChecking=no $h uptime

Esta opción también se puede agregar a ~ / .ssh / config, por ejemplo:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Tenga en cuenta que cuando las claves del host hayan cambiado, recibirá una advertencia, incluso con esta opción:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Si sus hosts no se vuelven a instalar con frecuencia, puede hacer esto menos seguro (pero más conveniente para las claves de host que cambian a menudo) con la opción -oUserKnownHostsFile=/dev/null . Esto descarta todas las claves de host recibidas, por lo que nunca generará la advertencia.

Con 18.04, hay una nueva posibilidad: StrictHostKeyChecking=accept-new . De man 5 ssh_config :

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
    
respondido por el Lekensteyn 18.04.2012 - 11:29
96

Puede usar el siguiente comando para agregar la huella digital de un servidor a sus known_hosts

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

NOTA: Reemplazar & lt; dirección IP & gt; y & lt; nombre de host & gt; con el nombre de IP y DNS del servidor que desea agregar.

El único problema con esto es que terminarás con algunos servidores en tus known_hosts dos veces. No es realmente un gran problema, solo mencionarlo. Para asegurarse de que no haya duplicados, primero puede eliminar todos los servidores ejecutando lo siguiente primero:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Para que pueda ejecutar:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Una cosa a tener en cuenta al eliminar solo para volver a agregar, esencialmente está eliminando la seguridad de verificar la huella digital. Entonces definitivamente no querrá ejecutar este script antes de cada ejecución de su script de utilidad.

    
respondido por el mhost 17.10.2013 - 02:24
23

Llego un poco tarde con esta respuesta, pero lo sensato sería hacer un ssh-keyscan en la nueva máquina antes de ejecutar la reunión de uptime.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Deshabilitar el control de cordura por conveniencia parece un mal plan, incluso si crees que tienes el control total del medio ambiente.

    
respondido por el tink 24.11.2014 - 20:47
0

Para agregar una lista de servidores automáticamente, podemos hacer lo siguiente:

Agregar servidores IP en servidores de archivos-lista

Las direcciones IP se deben agregar en el siguiente formato.

Salida de cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Cambia las IP anteriores reemplazando las tuyas.

debajo del comando agregará todos los servidores de la lista.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
respondido por el Waqas Khan 16.02.2018 - 08:46

Lea otras preguntas en las etiquetas