O que você quer parece muito com ssh-keys. Isso permite que você crie redes 'confiáveis' que não exigem senhas para serem inseridas. Isso também lhe dá segurança adicional para que você não tenha uma senha em texto simples em seu script.
Na máquina de origem:
ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/root/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Copie agora a chave pública para o servidor de destino:
ssh-copy-id [email protected]
[OR]
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Agora no seu script:
sftp -o "IdentityFile=/root/.ssh/id_rsa" [email protected]
Alternativamente, você poderia fazer:
read -s -p "Enter Password: " password
sshpass -p $password sftp [email protected]
Onde:
- -s: não exibe senha na tela
- -p: "Senha:": Exibir mensagem de texto
- senha: variável de bash na qual sua senha foi armazenada