SSH no cuenta con una manera fácil de enviar contraseñas a través de la entrada estándar, lo que dificulta la automatización. Aunque no es ideal para la seguridad, puede automatizar la autenticación de contraseña SSH en scripts bash usando el sshpass
utilidad.
Antes de comenzar, el uso de contraseñas automáticas para SSH se considera una mala práctica por un motivo. En casi todos los casos, es mejor utilizar una clave SSH, que mostraremos a continuación. A pesar de esto, las contraseñas disponen la ventaja de ser más fáciles de administrar, recordar y repartir a los miembros del equipo. Todos esos son inconvenientes simultáneamente para la seguridad, pero esa es una compensación que puede elegir por realizar.
Usando SSHPass
El regular ssh
el comando no tiene un --password
bandera para permitirle automatizar esto fácilmente. Deberás de instalar una herramienta llamada sshpass
para manejar esto explícitamente. Puede descargarlo de la mayoría de los administradores de paquetes de Linux; para sistemas basados en Debian como Ubuntu, eso sería:
sudo apt-get install sshpass
Si estas usando sshpass
desde el interior de un archivo de secuencia de comandos, puede pasarlo de forma directa con el -p
flag, seguido de su comando SSH estándar:
sshpass -p 'password' ssh user@remote
A pesar de esto, esta no es una buena práctica por algunas razones:
- Si se utiliza fuera de un archivo de secuencia de comandos, expone la contraseña de texto sin formato al historial de comandos de Linux y otros sistemas. Es factible que otros usuarios de Linux puedan verlo.
- Es factible que no esté claro que haya una contraseña oculta en este archivo de secuencia de comandos, lo que podría generar permisos de archivo incorrectos que lo expongan.
- Se puede rastrear accidentalmente en el control de versiones y no posibilita cambiar la contraseña utilizada en los clientes.
Debido a esto, debe almacenar la contraseña en un archivo. Asegúrese de configurar los permisos para asegurarse de que otros usuarios no puedan entrar a él.
echo "password" > password_file chmod 600 password_file
Después, pasa esto a sshpass
con -f
:
sshpass -f password_file ssh user@remote
Configurar claves SSH en su lugar
Las claves SSH son las preferidas para la mayoría de los sistemas. Son mucho más largos y más difíciles de filtrar accidentalmente, lo que los hace ideales para la seguridad. Además fomentan la autenticación basada en identidad, dado que las claves SSH de forma general están vinculadas a la máquina en la que se crean.
SSH almacena su clave pública en ~/.ssh/id_rsa.pub
, que utiliza para todas las solicitudes. Es fácil generar un nuevo archivo de clave:
ssh-keygen
Necesita agregar esto al ~/.ssh/authorized_keys
archivo en el servidor al que desea conectarse. Hay un comando SSH integrado que puede hacer esto fácilmente por usted:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Una vez realizado esto, ya no se le pedirá una contraseña. Puede copiar esta clave en otras máquinas, pero regularmente está bien agregar varias claves.
Aún querrá deshabilitar los inicios de sesión con contraseña en el servidor remoto y probablemente configurar la limitación de velocidad, la lista blanca o inclusive la autenticación de dos factores. Puede leer nuestra guía para proteger una máquina alcanzable SSH para obtener más información.
RELACIONADO: Cómo bloquear su servidor SSH