ssh-keyscan: Recopilar claves públicas de equipos | Algo de Linux

sábado, 5 de mayo de 2012

ssh-keyscan: Recopilar claves públicas de equipos

Openssh (http://www.openssh.com/) es una suite de herramientas que mantienen nuestras comunicaciones seguras.

Esta suite reemplaza:
  • rlogin y telnet con un cliente ssh.
  • rcp con scp
  • ftp con sftp.
Además incluye una aplicación servidora: sshd, además de una serie de herramientas como ssh-add, ssh-agent, ssh-keysign, ssh-keyscan, ssh-keygen y sftp-server

Hoy tan sólo vamos a hablar de ssh-keyscan, una utilidad que he usado en  varias ocasiones para recopilar las claves públicas de uno o varios hosts.

Utilicé, por ejemplo, ssh-keyscan en un script que realicé para apagar los terminales de un servidor ltsp cuando el usuario apaga, reinicia el servidor o cierra sesión. Cuando realizamos una conexión ssh el sistema nos pregunta si queremos almacenar la clave pública de la máquina a la que nos queremos conectar. Si le decimos que sí, almacenará dicha clave en el fichero ~/.ssh/known_hosts y no volverá a preguntar. El problema es que necesitaba que el script se ejecutase de forma no interactiva, almacenando la clave pública sin necesidad de intervención por parte del usuario. Pude resolver el problema gracias a ssh-keyscan.

Otra ocasión en la que he usado ssh-keyscan ha sido en un script que hace copias de seguridad en una máquina remota. En este caso tenía el mismo problema: Tratar de evitar que el sistema me preguntara si quería almacenar la clave pública de la máquina remota.

Para obtener la clave pública de una máquina no tenemos más que ejecutar el comando ssh-keyscan indicando la ip o el nombre del host. Ejemplo:

# ssh-keyscan 172.19.144.16

El sistema nos devolverá en pantalla el nombre o ip de la máquina junto con su clave pública.

También podemos escanear una lista de máquinas almacenada en un fichero:

# ssh-keyscan -f  listamaquinas

Cuando el sistema nos pregunta si queremos almacenar la clave pública de una máquina a la que estamos conectando, y le respondemos que sí, guarda dicha clave pública dentro del home del usuario, en el fichero:

~/.ssh/known_hosts

 Si quisiéramos escanear la dirección de una máquina y almacenar su clave pública de forma automática, podríamos hacer lo siguiente:

# ssh-keyscan 172.19.144.16 >> ~/.ssh/known_hosts | sort -u -o ~/.ssh/known_hosts

Como podemos observar, la clave pública se almacena en el fichero known_hosts dentro del directorio .ssh del home del usuario. 

Si utilizáis dsh habitualmente, estaréis de acuerdo conmigo en que es tremendamente útil usar ssh-keyscan para recopilar las claves públicas de los equipos en los que ejecutamos comandos remotamente con dsh:

# ssh-keyscan -f /etc/dsh/machines.list >> ~/.ssh/known_hosts | sort -u -o ~/.ssh/known_hosts

Por último, si queremos almacenar la clave pública de forma que se encuentre disponible para todos los usuarios, en lugar de guardarla en ~/.ssh/known_hosts, podemos almacenarla en el fichero /etc/ssh/ssh_known_hosts.


# ssh-keyscan 172.19.144.16 >> /etc/ssh/ssh_known_hosts | sort -u -o /etc/ssh/ssh_known_hosts

No hay comentarios: