Eu acho que o que você pede não é facilmente factível, talvez até impossível com scripts básicos do bash.
Portanto, o seguinte realmente não responde à sua pergunta, mas fornece outra abordagem para o seu problema.
Em vez de usar sshpass
, você pode usar o scp
comando plain com uma autenticação de chave pública sem senha. Veja [1] se você não sabe o que é.
Se você pretende usar scp em scripts para uso local , este é o IMO a seguir:
- gerar uma chave pública sem senha
- use
ssh-copy-id
para adicionar sua chave pública ao servidor
Isso já é suficiente para poder executar seu comando sem nenhum prompt:
scp -r [email protected]:/cmshome/me/file /home/me/Desktop
Para os scripts que você deseja distribuir , o sshpass com senha clara certamente não é uma boa idéia, você deve pelo menos usar o sinalizador "-e" do sshpass e permitir que o usuário forneça a senha como uma variável de ambiente para melhor segurança.
Nesse caso, a abordagem de chave pública é um pouco menos conveniente, mas ainda é possível. Se você não puder pedir ao usuário do script para criar uma chave pública, poderá criar uma chave pública em tempo real, copiá-la no servidor e executá-la scp
sem aviso:
#!/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" [email protected]
fi
scp -r [email protected]:/cmshome/me/file /home/me/Desktop
Finalmente, ainda existe a possibilidade de usar rsync
para fazer a barra de progresso:
$ 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