Logiciels en ligne de commande

SSH : sshpass, la connexion SSH par mot de passe non-interactive

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



Quand on se connecte à une machine en ssh (ou avec un transfert de fichiers avec rsync), il est nécessaire de taper son mot de passe.
Pour les scripts, j'utilise un couple de clé publique/privé. C'est la méthode à privilégier.
Cependant, parfois, nous n'avons pas le choix et devons utiliser un mot de passe.

sshpass va nous permettre de nous connecter en ssh sans demande de mot de passe.

Il existe plusieurs solutions pour passer le mot de passe à ssh (ou rsync, ou sftp) avec sshpass : variable d'environnement, dans la ligne de commande, dans un fichier, ...

J'en ai rapidement parlé il y a un moment dans l'article https://www.linuxtricks.fr/wiki/ssh-commandes-sftp mais je souhaite en faire un article dédié ici.

Nous allons voir ici comment l'utiliser !

Installation



Si le logiciel n'est pas installé, on l'installe :

Gentoo :
Code BASH :
emerge -av net-misc/sshpass


CentOS 8 (EPEL Requis) et Fedora :
Code BASH :
dnf install sshpass


CentOS 7 (EPEL Requis) :
Code BASH :
yum install sshpass


Debian et Ubuntu :
Code BASH :
apt install sshpass


Utilisation



Utilisation générale



La commande s'utilise avant ssh, rsync ou autre :

Code BASH :
sshpass [options] commande paramètres


Passer dans la ligne de commande le mot de passe



Pour passer en clair le mot de passe dans la commande, on utilisera l'option -p de sshpass.

Exemple avec une commande ssh :
Code BASH :
sshpass -p monmotdepassecostaud ssh adrien@192.168.21.100


Nous sommes directement connecté !

Il est nécessaire de bien sécuriser le script concerné (ne permettre en lecture que pour l'utilisateur) !!
A noter, les autres utilisateurs ne voient pas le mot de passe avec la commande ps -ef sur la machine, il est masqué avec des "zzz" :

Code BASH :
adrien   31966  6204  0 11:27 pts/0    00:00:00 sshpass -p zzzzzzz ssh adrien@192.168.21.100


Utiliser une variable d'environnement



Plutôt que de passer le mot de passe dans la ligne de commande, on peut utiliser la variable "SSHPASS" et stocker dedans le mot de passe ! On utilisera alors l'option -e de sshpass.

Exemple avec une commande rsync :
Code BASH :
export SSHPASS="monmotdepassecostaud"
sshpass -e rsync -avzh /tmp/ adrien@192.168.21.100:/home/adrien/tmp/


Le transfert débute sans demande de mot de passe.
On peut évidemment effacer la variable après utilisation !

Code BASH :
unset SSHPASS


Utiliser un fichier où le mot de passe est stocké



On peut aussi utiliser un fichier si on le souhaite, je n'en vois pas l'utilité en pratique.
Peut être si vous avez plusieurs scripts dans plusieurs langages ? Ou des caractères bizarres dans votre mot de passe qui empêche l'utilisation en ligne de commande / variable d'environnement ?

Le mot de passe lu sera la première ligne du fichier, sans le saut de ligne.

Exemple avec une commande ssh :
Code BASH :
echo monmotdepassecostaud > $HOME/mdpsshpass
sshpass -f /root/mdpsshpass ssh adrien@192.168.21.100


Comme la variable d'environnement, on peut supprimer le fichier après utilisation s'il ne sert pas à autre chose !

Code BASH :
rm $HOME/mdpsshpass


D'autres méthodes ...



L'outil permet aussi d'utiliser d'autres méthodes, mais je n'en vois pas l'intérêt, comme l'utilisation d'un file descriptor, ou de définir à nouveau un prompt de mot de passe.

Dans tous les cas, n'oubliez pas, pour toute la documentation de l'outil :

Code BASH :
man sshpass


:magic: