Penso che ciò che chiedi non sia facilmente realizzabile, forse addirittura impossibile con gli script bash di base.
Pertanto, quanto segue non risponde realmente alla tua domanda ma fornisce un altro approccio al tuo problema.
Invece di utilizzare sshpass
, è possibile utilizzare il scp
comando plain con un'autenticazione a chiave pubblica senza password. Vedi [1] se non sai di cosa si tratta.
Se si intende utilizzare scp negli script per uso locale , questo è, IMO la strada da percorrere:
- genera una chiave pubblica senza password
- utilizzare
ssh-copy-id
per aggiungere la chiave pubblica al server
È già abbastanza per essere in grado di eseguire il comando senza alcun prompt:
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Per gli script che si desidera distribuire , sshpass con password chiara non è certamente una buona idea, è necessario almeno utilizzare il flag "-e" di sshpass e consentire all'utente di fornire la password come variabile di ambiente per una migliore sicurezza.
In tal caso, l'approccio publickey è un po 'meno conveniente, ma è ancora possibile. Se non puoi permetterti di chiedere all'utente dello script di creare una chiave pubblica, puoi creare una chiave pubblica al volo, copiarla sul server ed eseguire scp
senza alcun prompt:
#!/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
Finalmente c'è ancora la possibilità di usare rsync
per fare la barra di avanzamento invece:
$ 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