[Nota del editor, 29 de noviembre de 2021:Todos los ejemplos de proporcionar una contraseña en la línea de comando incluyen el riesgo de que la contraseña se capture en el historial de shell del usuario (si es compatible) o sea visible para todos los usuarios del sistema en la lista de procesos. Los expertos en seguridad recomiendan eliminar todos los archivos y borrar los registros de shell.]
Conectar y transferir archivos a sistemas remotos es algo que los administradores de sistemas hacen todo el tiempo. Una herramienta esencial utilizada por muchos administradores de sistemas en plataformas Linux es SSH. SSH admite dos formas de autenticación:
- Autenticación de contraseña
- Autenticación de clave pública
La autenticación de clave pública se considera la forma más segura de estos dos métodos, aunque la autenticación de contraseña es la más popular y sencilla. Sin embargo, con la autenticación de contraseña, siempre se le pide al usuario que ingrese la contraseña. Esta repetición es tediosa. Además, SSH también requiere intervención manual cuando se usa en un script de shell. Si se necesita automatización al usar la autenticación de contraseña SSH, entonces una herramienta simple llamada sshpass
es indispensable.
¿Qué es sshpass?
El sshpass
La utilidad está diseñada para ejecutar SSH usando el keyboard-interactive modo de autenticación de contraseña, pero de forma no interactiva.
SSH utiliza el acceso TTY directo para garantizar que la contraseña sea efectivamente emitida por un usuario de teclado interactivo. sshpass
ejecuta SSH en un TTY dedicado, engañando a SSH haciéndole creer que está obteniendo la contraseña de un usuario interactivo.
Instalar sshpass
Puede instalar sshpass
con este simple comando:
# yum install sshpass
Usar sshpass
Especifique el comando que desea ejecutar después de sshpass
opciones Normalmente, el comando es ssh
con argumentos, pero también puede ser cualquier otro comando. Sin embargo, la solicitud de contraseña SSH está actualmente codificada en sshpass
.
La sinopsis del sshpass
comando se describe a continuación:
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
donde:
-ppassword
The password is given on the command line.
-ffilename
The password is the first line of the file filename.
-dnumber
number is a file descriptor inherited by sshpass from the runner. The password is read from the open file descriptor.
-e
The password is taken from the environment variable "SSHPASS".
Ejemplos
Para comprender mejor el valor y el uso de sshpass
, veamos algunos ejemplos con varias utilidades diferentes, incluidas SSH, Rsync, Scp y GPG.
Ejemplo 1:SSH
Usa sshpass
para iniciar sesión en un servidor remoto mediante SSH. Supongamos que la contraseña es !4u2tryhack
. A continuación se muestran varias formas de utilizar las opciones de sshpass.
R. Utilice -p
(esta se considera la opción menos segura y no debe usarse):
$ sshpass -p !4u2tryhack ssh [email protected]
El -p
La opción se ve así cuando se usa en un script de shell:
$ sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no [email protected]
B. Utilice el -f
opción (la contraseña debe ser la primera línea del nombre del archivo):
$ echo '!4u2tryhack' >pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh [email protected]
El $ chmod 0400 pass_file
es fundamental para garantizar la seguridad del archivo de contraseñas. El umask predeterminado en RHEL es 033, lo que permitiría la legibilidad mundial del archivo.
Aquí está el -f
opción cuando se usa en script de shell:
$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no [email protected]
C. Usa el -e
opción (la contraseña debe ser la primera línea del nombre del archivo):
$ SSHPASS='!4u2tryhack' sshpass -e ssh [email protected]
El -e
La opción cuando se usa en el script de shell se ve así:
$ SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no [email protected]
Ejemplo 2:Rsync
Usa sshpass
con rsync
:
$ SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/
Lo anterior usa el -e
opción, que pasa la contraseña a la variable de entorno SSHPASS
Podemos usar el -f
cambia así:
$ rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
Ejemplo 3:Scp
Usa sshpass
con scp:
$ scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
Ejemplo 4:GPG
También puede usar sshpass
con un archivo encriptado con GPG. Cuando -f
se utiliza el interruptor, el archivo de referencia está en texto sin formato. Veamos cómo podemos cifrar un archivo con GPG y usarlo.
Primero, cree un archivo de la siguiente manera:
$ echo '!4u2tryhack' > .sshpasswd
Luego, cifre el archivo usando gpg
comando:
$ gpg -c .sshpasswd
Elimina el archivo que contiene el texto sin formato:
$ rm .sshpasswd
Finalmente, utilícelo de la siguiente manera:
$ gpg -d -q .sshpasswd.gpg | sshpass ssh [email protected]
Resumir
sshpass
es una herramienta sencilla que puede ser de gran ayuda para los administradores de sistemas. De ninguna manera, esto anula la forma más segura de autenticación SSH, que es la autenticación de clave pública. Sin embargo, sshpass
también se puede agregar a la caja de herramientas del administrador del sistema.
[ Curso gratuito en línea:Descripción general técnica de Red Hat Enterprise Linux. ]