2012-08-27 18 views
10

Tengo el siguiente comando que funciona en mi script que agrega el host a los hosts conocidos en ssh.cómo verificar si un host está en su known_host ssh

VAR2=$(expect -c ' 
spawn ssh -o StrictHostKeyChecking=no '"[email protected]$REMOTE_HOST_IP"' 
expect "*?assword:*" 
send "'"$REMOTE_HOST_PASSWD"'\r" 
expect { 
"Permission denied, please try again." { 
exit '"$WRONG_PASSWORD"' 
} 
} 
') 

funciona bien, pero tengo que controlar antes de la orden si el host ya está en known_hosts y no ejecutar el comando si ya está en known_hosts. ¿Cómo puedo verificar si un host está en known_hosts?

Respuesta

24

Probar: ssh-keygen -F <hostname>

mostrará la línea known_hosts (s) si se encuentra la huella digital nombre de host y el comando devuelve 0, de lo contrario no se muestra nada y el comando devuelve 1.

+0

Esto no parece hacer nada, o incluso imprimir algo en la pantalla. Extraño. –

+0

@VinceKronlein, eso debería ocurrir cuando no se encuentra una coincidencia para su nombre de host. Solo se devolvieron las coincidencias completas. – complex857

+0

Sí, eso fue mal. No estaba usando solo el nombre de host, es decir: google.com, estaba tratando de buscar una clave para un repositorio git utilizando el host git, es decir: [email protected] ... una vez que usé solo el nombre de host funcionó bien . –

1

De acuerdo con ssh-keygen (1) página de manual

-F nombre de host de búsqueda para el nombre de host especificado en un archivo known_hosts, enumerando las ocurrencias encontradas. Esta opción es útil para encontrar nombres o direcciones de host hash y también se puede usar junto con la opción -H para imprimir claves encontradas en un formato hash.

Cuestiones relacionadas