sshpass: una eina excel·lent per a l'inici de sessió SSH no interactiu: no utilitzeu mai al servidor de producció


En la majoria dels casos, els administradors del sistema Linux inicien sessió als servidors Linux remots mitjançant SSH, ja sigui proporcionant una contrasenya, o inici de sessió SSH sense contrasenya, o autenticació SSH basada en clau.

Què passa si voleu proporcionar una contrasenya juntament amb el nom d'usuari a l'indicador SSH? aquí és on sshpass ve a rescatar.

sshpass és una eina de línia d'ordres senzilla i lleugera que ens permet proporcionar una contrasenya (autenticació de contrasenya no interactiva) al propi indicador d'ordres, de manera que es poden executar scripts de shell automatitzats per fer còpies de seguretat mitjançant el programador cron.

ssh utilitza accés directe TTY per assegurar-se que la contrasenya la proporciona realment un usuari de teclat interactiu. Sshpass executa ssh en un tty dedicat, l'enganya fent creure que està rebent la contrasenya d'un usuari interactiu.

Important: l'ús de sshpass es considera el menys segur, ja que revela la contrasenya a tots els usuaris del sistema a la línia d'ordres amb l'ordre ps senzill. Recomano molt utilitzar l'autenticació SSH sense contrasenya.

Instal·leu sshpass als sistemes Linux

Als sistemes basats en RedHat/CentOS, primer heu de comandar yum com es mostra.

# yum install sshpass
# dnf install sshpass    [On Fedora 22+ versions]

A Debian/Ubuntu i els seus derivats, podeu instal·lar-lo mitjançant l'ordre apt-get tal com es mostra.

$ sudo apt-get install sshpass

Alternativament, podeu instal·lar des de la font per tenir la darrera versió de sshpass, primer descarregueu el codi font i després extreu el contingut del fitxer tar i instal·leu-lo així:

$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install 

Com utilitzar sshpass a Linux

sshpass s'utilitza juntament amb ssh, podeu veure totes les opcions d'ús de sshpass amb descripcions completes emetent l'ordre següent:

$ sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Com he esmentat abans, sshpass és més fiable i útil per a la creació de seqüències de comandament, considereu les ordres d'exemple a continuació.

Inicieu la sessió al servidor ssh Linux remot (10.42.0.1) amb el nom d'usuari i la contrasenya i comproveu l'ús del disc del sistema de fitxers del sistema remot tal com es mostra.

$ sshpass -p 'my_pass_here' ssh [email  'df -h' 

Important: aquí, la contrasenya es proporciona a la línia d'ordres que pràcticament no és segura i no es recomana utilitzar aquesta opció.

Tanmateix, per evitar que es mostri la contrasenya a la pantalla, podeu utilitzar el senyalador -e i introduir la contrasenya com a valor de la variable d'entorn SSHPASS com a continuació:

$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh [email  'df -h' 

Nota: a l'exemple anterior, la variable d'entorn SSHPASS només té un propòsit temporal i s'eliminarà durant el reinici.

Per establir permanentment la variable d'entorn SSHPASS, obriu el fitxer /etc/profile i escriviu la declaració d'exportació al començament del fitxer:

export SSHPASS='my_pass_here'

Deseu el fitxer i sortiu i, a continuació, executeu l'ordre següent per fer els canvis:

$ source /etc/profile 

D'altra banda, també podeu utilitzar el senyalador -f i posar la contrasenya en un fitxer. D'aquesta manera, podeu llegir la contrasenya del fitxer de la següent manera:

$ sshpass -f password_filename ssh [email  'df -h'

També podeu utilitzar sshpass per fer còpies de seguretat/sincronitzar fitxers mitjançant rsync mitjançant SSH, tal com es mostra:

------- Transfer Files Using SCP ------- 
$ scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
$ rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Per a més ús, us suggereixo que llegiu la pàgina de manual de sshpass, escriviu:

$ man sshpass

En aquest article, vam explicar sshpass una eina senzilla que permet l'autenticació de contrasenyes no interactiva. Tot i que aquestes eines poden ser útils, és molt recomanable utilitzar el mecanisme d'autenticació de clau pública més segur de ssh.

Si us plau, deixeu una pregunta o un comentari a la secció de comentaris a continuació per a més debats.