Creo que lo que pides no es fácil de hacer, tal vez incluso imposible con scripting bash básico.
Por lo tanto, lo siguiente no responde realmente a su pregunta, pero proporciona otro enfoque para su problema.
En lugar de usar sshpass
, puede usar el scp
comando simple con una autenticación de clave pública sin contraseña. Vea [1] si no sabe lo que es.
Si tiene la intención de usar scp en scripts para uso local , esta es, en mi opinión, el camino a seguir:
- generar una clave pública sin contraseña
- use
ssh-copy-id
para agregar su clave pública al servidor
Eso ya es suficiente para poder ejecutar su comando sin ningún aviso:
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
Para los scripts que desea distribuir , sshpass con contraseña clara no es una buena idea, al menos debe usar el indicador "-e" de sshpass y permitir que el usuario proporcione la contraseña como una variable de entorno para una mejor seguridad.
En ese caso, el enfoque de clave pública es un poco menos conveniente, pero aún es posible. Si no puede permitirse el lujo de pedirle al usuario del script que cree una clave pública, puede crear una clave pública sobre la marcha, copiarla en el servidor y ejecutarla scp
sin preguntar:
#!/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, existe la posibilidad de usar rsync
para hacer la barra de progreso en su lugar:
$ 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