
Regularmente hago ssh en una computadora que es una computadora con arranque dual OS X/Linux. Las dos instancias de sistema operativo no comparten la misma clave de host, por lo que pueden verse como dos hosts que comparten la misma IP y DNS. Digamos que la IP es 192.168.0.9
y los nombres son hostname
yhostname.domainname
Según tengo entendido, la solución para poder conectarse a los dos hosts es agregarlos a ambos al ~/.ssh/know_hosts
archivo. Sin embargo, es más fácil decirlo que hacerlo, porque el archivo tiene hash y probablemente tenga varias entradas por host ( 192.168.0.9
, hostname
, hostname.domainname
). Como consecuencia, tengo la siguiente advertencia.
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
¿Existe una manera fácil de editar el known_hosts
archivo manteniendo los hashes? Por ejemplo, ¿cómo puedo encontrar las líneas correspondientes a un hostame determinado? ¿Cómo puedo generar los hashes para algunos hosts conocidos?
La solución ideal me permitiría conectarme sin problemas a esta computadora con ssh, sin importar si la llamo 192.168.0.9
, hostname
o hostname.domainname
, ni si usa su clave de host Linux o su clave de host OSX. Sin embargo, todavía quiero recibir una advertencia si hay un ataque real de intermediario.es decirsi se utiliza otra clave distinta de estas dos.
Respuesta1
La solución más sencilla aquí es simplemente usar las mismas claves de host para Linux y OS X. Es decir, elegir un conjunto de /etc/ssh/ssh_host_*_key*
archivos y copiarlos al otro sistema operativo. Luego, la misma clave de host se presentará a un cliente SSH independientemente del sistema operativo que haya iniciado, y el cliente SSH no se dará cuenta.
Respuesta2
Como sugirió @Izzy en un comentario anterior, ssh le indica la línea ofensiva y, al eliminar esa línea (guardarla en otro lugar), aceptar la nueva clave y luego copiar la línea eliminada nuevamente, terminará con dos claves para la misma host y ssh aceptará cualquiera de los dos.
(También puede utilizar ssh-keygen -H -F <hostname>
para buscar líneas en su archivoknown_hosts que coincidan con ese nombre de host. Ejecutar esto después de copiar la línea eliminada debería mostrar dos entradas).
Si alguien sabe cómo hacer que PuTTY haga lo mismo, me interesaría mucho saberlo.
Respuesta3
Encontré esto que puede ayudarte con lo que quieres lograr.
Cree un archivo de configuración en su directorio .ssh de la siguiente manera:
Host server1 Hostname x1.example.com HostKeyAlias server1 CheckHostIP no Port 22001 User karl Host server2 Hostname x2.example.com HostKeyAlias server2 CheckHostIP no Port 22002 User karl
Explicación a continuación (de man ssh_config)
ComprobarHostIP
Si este indicador está configurado en "sí", ssh(1) verificará adicionalmente la dirección IP del host en el archivoknown_hosts. Esto permite que ssh detecte si una clave de host cambió debido a una suplantación de DNS. Si la opción está configurada en "no", la verificación no se ejecutará. El valor predeterminado es "sí".
Alias de clave de host
Especifica un alias que se debe utilizar en lugar del nombre real del host al buscar o guardar la clave del host en los archivos de la base de datos de claves del host. Esta opción es útil para hacer túneles de conexiones SSH o para múltiples servidores que se ejecutan en un solo host.
La línea Nombre de usuario y Puerto también evita que tengas que dar esas opciones en la línea de comando, por lo que puedes usar:
% ssh server1 % ssh server2
Respuesta4
No tengo ese problema cuando me conecto a varias cajas VPS que comparten la misma IP porque cada una tiene un puerto SSH diferente (20022,30022, etc.), por lo que están registradas como hosts conocidos con claves diferentes.
¿Podría ser una solución para ti?