2010-09-08 22 views
112

Cuando me conecto a una máquina, en algún momento aparece esta advertencia de error y me pide que diga "sí" o "no". Esto causa algunos problemas cuando se ejecuta desde scripts que se transfieren automáticamente a otras máquinas.ssh: La autenticidad del host 'nombre de host' no se puede establecer

mensaje de advertencia:

The authenticity of host '<host>' can't be established. 
ECDSA key fingerprint is SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts. 

¿Hay una manera de decir de forma automática "sí" o ignorar esto?

+18

Aconsejaría esto. Necesita averiguar por qué está recibiendo estos errores, de lo contrario se está abriendo a un hombre en el ataque medio, que es lo que estos errores están tratando de protegerlo. –

+2

Esto podría ser causado por un cambio en el servidor que usa esa clave ssh, o podría ser causado por alguien sentado entre usted y el servidor escuchando todo lo que envía/recibe. – derekdreery

Respuesta

100

Según su cliente ssh, puede establecer la opción StrictHostKeyChecking en no en la línea de comando y/o enviar la clave a un archivo nulo known_hosts. También puede establecer estas opciones en su archivo de configuración, ya sea para todos los hosts o para un conjunto determinado de direcciones IP o nombres de host.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 

EDITAR

Como notas @IanDunn, existen riesgos de seguridad para hacer esto. Si un atacante ha falsificado el recurso al que se está conectando, podrían volver a reproducir el desafío del servidor de destino, engañándolo y haciéndole creer que se está conectando al recurso remoto, mientras que de hecho se están conectando a ese recurso con tus credenciales Debe considerar cuidadosamente si ese es un riesgo apropiado para asumir antes de alterar su mecanismo de conexión para omitir HostKeyChecking.

Reference.

+22

Creo que es irresponsable recomendar esto sin previo aviso sobre las implicaciones de seguridad. http://superuser.com/a/421084/121091 es una mejor respuesta IMO. –

+3

@IanDunn Estoy de acuerdo con usted en una situación general de cliente de SSH, pero dado que el OP indica claramente que está encontrando este problema mientras ejecuta scripts, la alternativa es romper el script cada vez que cambia la clave del host (y hay una serie de razones por qué ese podría ser el caso) a lo que la respuesta a la que se refiere no se resuelve. Dicho esto, es una crítica válida, por lo que he actualizado mi respuesta para señalar el riesgo. – cori

+1

No puedo creer que tanta gente haya votado a favor esta respuesta y también que sea aceptada por el interrogador. Este enfoque omite las comprobaciones de seguridad y lo conecta al host remoto. Compruebe si el archivo known_hosts en la carpeta ~/.ssh/tiene permiso de escritura. De lo contrario, utiliza esta respuesta http: // stackoverflow.com/a/35045005/2809294 –

2

En general, este problema se produce cuando modifica las claves muy a menudo. En función del servidor, puede llevar algún tiempo actualizar la nueva clave que ha generado y pegado en el servidor. Entonces, después de generar la clave y pegar en el servidor, espere de 3 a 4 horas y luego intente. El problema debe ser resuelto. Sucedió conmigo.

27

Para desactivar (o desactivación de control), añadir las siguientes líneas al principio del /etc/ssh/ssh_config ...

Host 192.168.0.* 
    StrictHostKeyChecking=no 
    UserKnownHostsFile=/dev/null 

Opciones:

  • La subred huésped puede ser * para permitir el acceso sin restricciones a todos los IP.
  • Editar /etc/ssh/ssh_config para la configuración global o ~/.ssh/config para la configuración específica del usuario.

Ver http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

pregunta similares en superuser.com - veo https://superuser.com/a/628801/55163

+3

StrictHostKeyChecking = no '=' falta el carácter – tryer3000

-3

resuelvo el tema que da a continuación de error escrito:
error:
La autenticidad de acogida 'XXX.XXX. XXX 'no se puede establecer.
La huella digital de la clave RSA es 09: 6c: ef: cd: 55: c4: 4f: ss: 5a: 88: 46: 0a: a9: 27: 83: 89.

Solución:
1. instale cualquier herramienta openSSH.
2. ejecute el comando ssh
3. le preguntará si desea agregar este host como. acepta SÍ.
4.Este host agregará en la lista de hosts conocidos.
5. Ahora puede conectarse con este host.

Esta solución está trabajando ahora ......

+0

Esto no responde la pregunta. La pregunta original (muy antigua) se refería a la capacidad de confirmar automáticamente estas indicaciones a través de un script. – MasterAM

13

Asegúrese ~/.ssh/known_hosts se puede escribir. Eso lo solucionó para mí.

+2

¿es seguro permitir que todos escriban a known_hosts? – akaRem

+1

@akaRem definitivamente no. Por lo general, desea que solo se pueda escribir en el usuario propietario de la carpeta '.ssh'. – 2rs2ts

+0

permisos '0400' son óptimos (corrígeme a cualquiera) sin embargo, en mi caso, el problema era simplemente que la carpeta' .ssh' para mi usuario había cambiado de propietario, lo que invalidaba mis propios permisos 0400. 'sudo' cambiando la propiedad de nuevo a mí resolvió mi problema. – charneykaye

7

La mejor manera de hacerlo es utilizar 'BatchMode' además de 'StrictHostKeyChecking'. De esta forma, su script aceptará un nuevo nombre de host y lo escribirá en el archivo known_hosts, pero no requerirá intervención de sí/no.

ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime" 
53

Pregunta anterior que merece una respuesta mejor.

Puede evitar la solicitud interactiva sin deshabilitar StrictHostKeyChecking (que es inseguro).

Incorporar la siguiente lógica en la secuencia de comandos:

if [ -z `ssh-keygen -F $IP` ]; then 
    ssh-keyscan -H $IP >> ~/.ssh/known_hosts 
fi 

comprueba si la clave pública del servidor se encuentra en known_hosts. De lo contrario, solicita la clave pública del servidor y la agrega al known_hosts.

De esta manera usted está expuesto a ataques man-in-the-middle una sola vez, lo que puede ser mitigado por:

  • asegurar que el script se conecta por primera vez por un canal seguro
  • inspección de registros o known_hosts para comprobar las huellas dactilares de forma manual (que se realiza una sola vez)
+2

O simplemente administre el archivo known_hosts para todas las máquinas como parte de la configuración de su infraestructura. – Thilo

+0

tenga en cuenta que ssh-keyscan no funciona con ProxyCommand: http://marc.info/?l=openssh-unix-dev&m=108446567718763&w=2 – Richlv

10

Editar archivo de su configuración normalmente se encuentra en '~/.ssh/config', ya comienzos de los archivos, añadir las siguientes líneas

Host * 
    User     your_login_user 
    StrictHostKeyChecking no 
    IdentityFile   ~/my_path/id_rsa.pub 

usuario establecer a your_login_user dice que esta configuración pertenece a your_login_user
StrictHostKeyChecking establece en no evitará el símbolo
IdentityFile es camino hacia la clave RSA

Esto funciona para mí y mis guiones, buena suerte para usted .

+0

Gracias realmente salvó el día. Pero, ¿para qué sirve la última línea 'IdentityFile'? Parece que funciona sin él también ... – supersan

6

Esta advertencia se emite debido a las características de seguridad, no deshabilite esta característica.

Se muestra solo una vez.

Si aún aparece después de la segunda conexión, es probable que el problema se encuentre al escribir en el archivo known_hosts. En este caso también obtendrá el siguiente mensaje:

Failed to add the host to the list of known hosts 

Usted puede solucionarlo cambiando propietario de cambiar los permisos del archivo para ser su usuario puede escribir.

sudo chown -v $USER ~/.ssh/known_hosts 
1

hacer esto -> chmod + w ~/.ssh/known_hosts Esto añade permiso de escritura en el archivo en ~/.ssh/known_hosts.Después de eso, el host remoto se agregará al archivo known_hosts cuando se conecte a él la próxima vez.

+0

¡Esto resolvió mi caso, gracias! –

4

Con referencia a la respuesta de Cori, la modifiqué y usé debajo del comando, que está funcionando. Sin exit, comando restante fue de hecho el registro en la máquina remota, que no quería en escritura

ssh -o StrictHostKeyChecking=no [email protected]_of_remote_machine "exit" 
1

Idealmente, se debe crear una autoridad de certificación autogestionada. Comenzar con la generación de un par de claves: ssh-keygen -f cert_signer

Luego de firmar la clave pública host de cada servidor: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

Esto genera una clave de host pública firmada: /etc/ssh/ssh_host_rsa_key-cert.pub

En /etc/ssh/sshd_config, apunte el HostCertificate a este archivo : HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Reinicie el servicio sshd: service sshd restart

A continuación, en el cliente SSH, añada lo siguiente a ~/.ssh/known_hosts: @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

El anterior contiene:

  • @cert-authority
  • El dominio *.example.com
  • El contenido completo de la clave pública cert_signer.pub

La clave pública cert_signer confiará en cualquier servidor cuya clave pública de host esté firmada por la clave privada cert_signer.

Aunque esto requiere una configuración única en el lado del cliente, puede confiar en varios servidores, incluidos aquellos que aún no se han aprovisionado (siempre y cuando firme cada servidor, eso es).

Para obtener más información, consulte this wiki page.

Cuestiones relacionadas