[Note de l'éditeur, 29 novembre 2021 :tous les exemples de fourniture d'un mot de passe sur la ligne de commande incluent le risque que le mot de passe soit capturé dans l'historique du shell de l'utilisateur (si pris en charge) ou visible par tous les utilisateurs du système dans la liste des processus. Les experts en sécurité recommandent de supprimer tous les fichiers et d'effacer les journaux du shell.]
La connexion et le transfert de fichiers vers des systèmes distants sont des tâches que les administrateurs système font tout le temps. SSH est un outil essentiel utilisé par de nombreux administrateurs système sur les plates-formes Linux. SSH prend en charge deux formes d'authentification :
- Authentification par mot de passe
- Authentification par clé publique
L'authentification par clé publique est considérée comme la forme la plus sécurisée de ces deux méthodes, bien que l'authentification par mot de passe soit la plus populaire et la plus simple. Cependant, avec l'authentification par mot de passe, l'utilisateur est toujours invité à entrer le mot de passe. Cette répétition est fastidieuse. De plus, SSH nécessite également une intervention manuelle lorsqu'il est utilisé dans un script shell. Si l'automatisation est nécessaire lors de l'utilisation de l'authentification par mot de passe SSH, un outil simple appelé sshpass
est indispensable.
Qu'est-ce que sshpass ?
Le sshpass
L'utilitaire est conçu pour exécuter SSH à l'aide de keyboard-interactive mode d'authentification par mot de passe, mais de manière non interactive.
SSH utilise un accès direct TTY pour s'assurer que le mot de passe est bien émis par un utilisateur de clavier interactif. sshpass
exécute SSH dans un TTY dédié, faisant croire à SSH qu'il obtient le mot de passe d'un utilisateur interactif.
Installer sshpass
Vous pouvez installer sshpass
avec cette simple commande :
# yum install sshpass
Utiliser sshpass
Spécifiez la commande que vous souhaitez exécuter après le sshpass
options. Typiquement, la commande est ssh
avec des arguments, mais il peut aussi s'agir de n'importe quelle autre commande. L'invite de mot de passe SSH est cependant actuellement codée en dur dans sshpass
.
Le synopsis pour le sshpass
commande est décrite ci-dessous :
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
Où :
-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".
Exemples
Pour mieux comprendre la valeur et l'utilisation de sshpass
, examinons quelques exemples avec plusieurs utilitaires différents, notamment SSH, Rsync, Scp et GPG.
Exemple 1 :SSH
Utilisez sshpass
pour vous connecter à un serveur distant à l'aide de SSH. Supposons que le mot de passe est !4u2tryhack
. Vous trouverez ci-dessous plusieurs façons d'utiliser les options sshpass.
A. Utilisez le -p
(ceci est considéré comme le choix le moins sûr et ne doit pas être utilisé) :
$ sshpass -p !4u2tryhack ssh [email protected]
Le -p
l'option ressemble à ceci lorsqu'elle est utilisée dans un script shell :
$ sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no [email protected]
B. Utilisez le -f
option (le mot de passe doit être la première ligne du nom de fichier):
$ echo '!4u2tryhack' >pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh [email protected]
Le $ chmod 0400 pass_file
est essentiel pour garantir la sécurité du fichier de mots de passe. L'umask par défaut sur RHEL est 033, ce qui permettrait une lisibilité mondiale du fichier.
Voici le -f
option lorsqu'elle est utilisée dans un script shell :
$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no [email protected]
C. Utilisez le -e
option (le mot de passe doit être la première ligne du nom de fichier):
$ SSHPASS='!4u2tryhack' sshpass -e ssh [email protected]
Le -e
l'option lorsqu'elle est utilisée dans un script shell ressemble à ceci :
$ SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no [email protected]
Exemple 2 :Rsync
Utilisez sshpass
avec rsync
:
$ SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/
Ce qui précède utilise le -e
option, qui transmet le mot de passe à la variable d'environnement SSHPASS
Nous pouvons utiliser le -f
changer comme ceci :
$ rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
Exemple 3 :Scp
Utilisez sshpass
avec scp:
$ scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
Exemple 4 :GPG
Vous pouvez également utiliser sshpass
avec un fichier crypté GPG. Lorsque le -f
switch est utilisé, le fichier de référence est en clair. Voyons comment chiffrer un fichier avec GPG et l'utiliser.
Commencez par créer un fichier comme suit :
$ echo '!4u2tryhack' > .sshpasswd
Ensuite, cryptez le fichier en utilisant le gpg
commande :
$ gpg -c .sshpasswd
Supprimez le fichier qui contient le texte en clair :
$ rm .sshpasswd
Enfin, utilisez-le comme suit :
$ gpg -d -q .sshpasswd.gpg | sshpass ssh [email protected]
Récapitulez
sshpass
est un outil simple qui peut être d'une grande aide pour les administrateurs système. Cela ne remplace en aucun cas la forme d'authentification SSH la plus sécurisée, qui est l'authentification par clé publique. Cependant, sshpass
peut également être ajouté à la boîte à outils sysadmin.
[ Cours en ligne gratuit :Présentation technique de Red Hat Enterprise Linux. ]