Recherche de site Web

sshpass : un excellent outil pour la connexion SSH non interactive - Ne jamais utiliser sur un serveur de production


Dans la plupart des cas, les administrateurs système Linux se connectent aux serveurs Linux distants à l'aide de SSH en fournissant un mot de passe, une connexion SSH sans mot de passe ou une authentification SSH par clé.

Que se passe-t-il si vous souhaitez fournir un mot de passe ainsi qu'un nom d'utilisateur à l'invite SSH elle-même ? c'est là que sshpass vient à la rescousse.

sshpass est un outil de ligne de commande simple et léger qui nous permet de fournir un mot de passe (authentification par mot de passe non interactive) à l'invite de commande elle-même, afin que des scripts shell automatisés puissent être exécutés pour effectuer des sauvegardes via le planificateur cron.

ssh utilise un accès TTY direct pour s'assurer que le mot de passe est bien fourni par un utilisateur de clavier interactif. Sshpass exécute ssh dans un terminal dédié, ce qui le fait croire en erreur qu'il reçoit le mot de passe d'un utilisateur interactif.

Important : L'utilisation de sshpass est considérée comme la moins sécurisée, car elle révèle le mot de passe à tous les utilisateurs du système sur la ligne de commande avec un simple Commande « ps ». Je recommande fortement d'utiliser l'authentification SSH sans mot de passe.

Installer sshpass sur les systèmes Linux

Dans les systèmes basés sur RedHat/CentOS, vous devez d'abord activer le référentiel Epel sur votre système pour l'installer à l'aide de la commande yum comme indiqué.

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

Sur Debian/Ubuntu et ses dérivés, vous pouvez l'installer à l'aide de la commande apt-get comme indiqué.

sudo apt-get install sshpass

Alternativement, vous pouvez installer à partir des sources pour avoir la dernière version de sshpass, télécharger d'abord le code source, puis extraire le contenu du fichier tar et l'installer comme ceci :

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 

Comment utiliser sshpass sous Linux

sshpass est utilisé avec ssh, vous pouvez afficher toutes les options d'utilisation de sshpass avec des descriptions complètes en exécutant la commande ci-dessous :

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

Comme je l'ai mentionné précédemment, sshpass est plus fiable et plus utile à des fins de script, considérez les exemples de commandes ci-dessous.

Connectez-vous au serveur SSH Linux distant (10.42.0.1) avec le nom d'utilisateur et le mot de passe et vérifiez l'utilisation du disque du système de fichiers du système distant, comme indiqué.

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

Important : Ici, le mot de passe est fourni sur la ligne de commande qui n'est pratiquement pas sécurisée et l'utilisation de cette option n'est pas recommandée.

Cependant, pour éviter d'afficher le mot de passe à l'écran, vous pouvez utiliser l'indicateur -e et saisir le mot de passe comme valeur de la variable d'environnement SSHPASS comme ci-dessous :

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

Remarque : Dans l'exemple ci-dessus, la variable d'environnement SSHPASS est destinée à un usage temporaire uniquement et sera supprimée lors du redémarrage.

Pour définir de manière permanente la variable d'environnement SSHPASS, ouvrez le fichier /etc/profile et tapez l'instruction d'exportation au début du fichier :

export SSHPASS='my_pass_here'

Enregistrez le fichier et quittez, puis exécutez la commande ci-dessous pour appliquer les modifications :

source /etc/profile 

D'un autre côté, vous pouvez également utiliser le drapeau -f et mettre le mot de passe dans un fichier. De cette façon, vous pouvez lire le mot de passe du fichier comme suit :

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

Vous pouvez également utiliser sshpass pour transférer des fichiers à l'aide de scp ou sauvegarder/synchroniser des fichiers via rsync à l'aide de SSH, comme indiqué :

------- 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/

Pour plus d'utilisation, je vous suggère de lire la page de manuel sshpass, tapez :

man sshpass

Dans cet article, nous avons expliqué sshpass, un outil simple qui permet une authentification par mot de passe non interactive. Bien que ces outils puissent être utiles, il est fortement recommandé d’utiliser le mécanisme d’authentification par clé publique plus sécurisé de ssh.

Veuillez laisser une question ou un commentaire via la section commentaires ci-dessous pour toute discussion ultérieure.