Je pense que ce que vous demandez n'est pas facilement réalisable, voire impossible avec les scripts bash basiques.
Par conséquent, ce qui suit ne répond pas vraiment à votre question mais fournit une autre approche de votre problème.
Au lieu d'utiliser sshpass
, vous pouvez utiliser la scp
commande plain avec une authentification publickey sans mot de passe. Voir [1] si vous ne savez pas ce que c'est.
Si vous avez l'intention d'utiliser scp dans des scripts pour une utilisation locale , c'est IMO la voie à suivre:
- générer un publickey sans mot de passe
- utiliser
ssh-copy-id
pour ajouter votre clé publique au serveur
C'est déjà suffisant pour pouvoir exécuter votre commande sans aucune invite:
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Pour les scripts que vous souhaitez distribuer , sshpass avec un mot de passe clair n'est certainement pas une bonne idée, vous devez au moins utiliser l'indicateur "-e" de sshpass et laisser l'utilisateur fournir le mot de passe comme variable d'environnement pour une meilleure sécurité.
Dans ce cas, l'approche publickey est un peu moins pratique mais elle reste possible. Si vous ne pouvez pas vous permettre de demander à l'utilisateur du script de créer une clé publique, vous pouvez créer une clé publique à la volée, la copier sur le serveur et l'exécuter scp
sans aucune invite:
#!/bin/bash
KEY="$HOME/.ssh/id_rsa_example"
if [ ! -e "$KEY" ]; then
ssh-keygen -t rsa -N "" -f "$KEY"
sshpass -e ssh-copy-id -i "${KEY}.pub" me8@host.ca
fi
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Enfin il y a encore la possibilité d'utiliser rsync
pour faire la barre de progression à la place:
$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop
[1] https://help.ubuntu.com/community/SSH/OpenSSH/Keys