¿Cómo evitar ssh pidiendo permiso?

59

Estamos intentando acelerar la instalación de nodos oracle para la instalación de RAC. esto requiere que tengamos instalado y configurado ssh para que no solicite una contraseña.

El problema es: en el primer uso, se nos solicita

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

¿Hay alguna manera de evitar eso o estamos condenados a conectarnos al menos una vez en cada servidor desde cada servidor manualmente?

Nicolas de Fontenay
fuente

Respuestas:

92

Establezca StrictHostKeyChecking noen su /etc/ssh/ssh_configarchivo, donde será una opción global utilizada por cada usuario en el servidor. O configúrelo en su ~/.ssh/configarchivo, donde será el predeterminado solo para el usuario actual. O puede usarlo en la línea de comando:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Aquí hay una explicación de cómo funciona esto man ssh_config (o vea esta versión más actual ):

StrictHostKeyChecking

      Si este indicador se establece en "sí", ssh nunca agregará automáticamente claves de host al $HOME/.ssh/known_hostsarchivo y se niega a conectarse a hosts cuya clave de host ha cambiado. Esto proporciona la máxima protección contra los ataques de caballos de Troya, sin embargo, puede ser molesto cuando el /etc/ssh/ssh_known_hostsarchivo se mantiene mal o se realizan conexiones a nuevos hosts con frecuencia. Esta opción obliga al usuario a agregar manualmente todos los hosts nuevos. Si este indicador se establece en "no", sshagregará automáticamente nuevas claves de host a los archivos de hosts conocidos del usuario. Si este indicador se establece en "preguntar", las nuevas claves de host se agregarán a los archivos de host conocidos del usuario solo después de que el usuario haya confirmado que es lo que realmente quiere hacer, y ssh se negará a conectarse a hosts cuya clave de host ha cambiado . Las claves de host de los hosts conocidos se verificarán automáticamente en todos los casos. El argumento debe ser "sí", "no" o "preguntar". El valor predeterminado es "preguntar".

Tim Kennedy
fuente
1
+1, también esto para mis servidores. Y para ser claros, el mensaje en la pregunta proviene del cliente ssh en la computadora cliente conectada y no del servidor.
Patkos Csaba
3
Esta respuesta suena como un problema de seguridad en proceso.
SunSparc
25

ssh-keyscan - Recopilar claves públicas ssh

Si ya conoce la lista de hosts a los que se conectará, puede emitir:

ssh-keyscan host1 host2 host3 host4

Puede dar la -Hopción de tener resultados hash como valores predeterminados de ssh ahora

También le puede dar -t keytypeeras keytype es dsa, rsao ecdsasi usted tiene una preferencia en cuanto a qué tipo de clave para agarrar en lugar del predeterminado.

Una vez que lo haya ejecutado ssh-keyscan, habrá rellenado previamente su archivo de hosts conocidos y no tendrá ssh pidiéndole permiso para agregar una nueva clave.

kurtm
fuente
1
Estoy un poco desconcertado sobre el comentario "habrá rellenado previamente" ... known_hosts no se crea o modifica después de ejecutar esto. ¿Quiere decir que el contenido se puede canalizar al archivo para llenarlo?
rschwieb
44
Confirmando con techrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hosts, o para todo el servidor,/etc/ssh/ssh_known_hosts
cole
12

Puede agregar la huella digital a los servidores conocidos de cada servidor. Para un solo usuario:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
David Souther
fuente
3
Esta ya no es la forma correcta de hacerlo desde que se introdujo el hashing.
Deim0s
10

Ignorar host

Ignora el HostKeyChecking. Para esto utilizo, por ejemplo:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null [email protected]

Agregar host

Agregue la huella digital del host / servidor .ssh/known_hostsantes de su primera conexión. Esta es la forma más segura.

xebeche
fuente
Hola. Oracle emite el comando ssh, así que no tengo control sobre cómo realiza esto.
Nicolas de Fontenay
Votado. La mayoría de las respuestas que he visto pierden la mención de que el desarrollador anula el archivo de hosts conocido. Esto hace que el comando sea mucho más útil y no arruinará ninguna configuración existente.
Alex
(2) Claro, agregar la huella digital al archivo de hosts conocidos es el enfoque ideal, pero ¿cómo se hace? (1) ¿Por qué es beneficioso configurar el archivo de hosts conocidos del usuario  /dev/null? ¿No sería mejor hacerlo ssh -oStrictHostKeyChecking=no [email protected]una vez para obtener la huella digital del servidor en el $HOME/.ssh/known_hostsarchivo, para que las conexiones posteriores se realicen sin una solicitud de confirmación?
G-Man dice 'Reincorporar a Monica' el
3

Ejecute el siguiente fragmento antes de intentarlo.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: estrictamente no para servidores de producción, tenga cuidado con ManInMiddle

147,3k
fuente
0

Sin embargo, me gusta la respuesta de Tim para cosas únicas, si este es un host al que desea conectarse regularmente, crearía una entrada en su ~ / .ssh / config (créelo si el archivo no existe).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Jaime
fuente