sshpass: Establecer una conexión ssh de modo no interactivo | Algo de Linux

viernes, 20 de abril de 2012

sshpass: Establecer una conexión ssh de modo no interactivo

Es más seguro utilizar un mecanismo de autentificación basado en clave pública cuando queremos establecer una conexión ssh de forma no interactiva, pero en ocasiones, necesitamos o queremos que al hacer el ssh no se nos pida el password. Para ésto nos viene muy bien sshpass.

Puesto que ssh es una herramienta interactiva, sshpass está pensado para permitirnos establecer conexiones ssh no-interactivas.

Podemos encontrar sshpass en los repositorios de Debian, por lo que instalarlo es trivial:

# apt-get install sshpass

Veamos ahora unos ejemplos de cómo podemos utilizarlo:

El uso más sencillo es especificar el password con el parámetro -p:

$ sshpass -p "mipassword" ssh usuario@host

Podemos combinar sshpass con rsync para sincronizar, por ejemplo, una carpeta de nuestro equipo con la de una máquina remota:

$ rsync -e 'sshpass -p mipassword ssh -l usuariobackup'  -aSv Documentos root@192.168.1.100:/var/copiaseguridad/

Como podemos ver, le decimos a rsync que utilice el usuario usuariobackup (ssh -l usuariobackup) con la password mipassword (sshpass -p mipassword).

Este mecanismo no es muy seguro porque ejecutando un simple ps, se puede ver la password.

Podríamos guardar la password en un fichero y hacer que sshpass lea la password de dicho fichero:

$ rsync -e 'sshpass -f passwordfile ssh -l usuariobackup'  -aSv Documentos root@192.168.1.100:/home/copiaseguridad/

Otro modo que he encontrado buscando información en google para hacer lo mismo usando un descriptor de archivo:

$ rsync -e 'sshpass -d 100 ssh -l root' -aSv Documentos root@192.168.1.100:/home/copiaseguridad/ 100<<<"mipassword"

2 comentarios:

Anónimo dijo...

$ rsync -e 'sshpass -f passwordfile ssh -l usuariobackup' -aSv Documentos root@192.168.1.100:/home/copiaseguridad/

me parece que le falta el "destino" (o se una carpeta local Ej: mi usuario local se llama "juan" y la carpeta "mi_carpeta_local"

$ rsync -e 'sshpass -f passwordfile ssh -l usuariobackup' -aSv Documentos root@192.168.1.100:/home/copiaseguridad/ /home/juan/mi_carpeta_local

Esteban M. Navas Martín dijo...

No falta nada en el ejemplo. Si te fijas, el origen es "Documentos" y el destino "root@192.168.1.100:/home/copiaseguridad"