Eu acho que o que você pergunta não é facilmente factível, talvez até impossível com scripts bash básicos.
Portanto, o seguinte não responde realmente à sua pergunta, mas fornece outra abordagem para o seu problema.
Em vez de usar sshpass
, você poderia usar o comando scp
simples com uma autenticação publickey sem senha. Veja [1] se você não sabe o que é.
Se você pretende usar o scp em scripts para uso local , este é o caminho a seguir:
- gera uma publickey sem senha
- use
ssh-copy-id
para adicionar sua chave pública ao servidor
Isso já é suficiente para poder executar o seu comando sem qualquer aviso:
scp -r [email protected]:/cmshome/me/file /home/me/Desktop
Para scripts que você deseja distribuir , sshpass com senha clara certamente não é uma boa idéia, você deve pelo menos usar o sinalizador "-e" do sshpass e deixar o usuário fornecer a senha como um 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 executar scp
sem nenhum 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, há ainda 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] link