Primeiro, vamos analisar alguns factos que são fáceis de confundir:
- O SSH (e consequentemente o scp) suporta vários métodos de autenticação. Os dois mais populares são de longe "password" e "publickey"
- Se alguém usar "publickey", o lado do cliente deve ter um arquivo de chaves privado e público [1]. O privado um pode ou não ser criptografado com uma frase secreta
- Quando o método "publickey" é usado, o agente ssh pode conter chaves privadas na memória. Isso pode ser útil quando um arquivo de chave privada é criptografado e não se deseja digitar sua senha longa e outra vez. Mas o agente ssh não é de nenhuma ajuda onde o método de autenticação baseado em senha é usado.
No contexto do SSH, quando as pessoas usam o termo ...
- ... "senha", eles geralmente significam o método de autenticação baseado em senha
- ... "frase secreta", eles geralmente significam que a senha é criptografada com
... mas é claro que isso é apenas uma convenção e uma grande fonte de confusão.
Dito isso, tento responder sua pergunta:
Caso você queira dizer autenticação SSH baseada em senha :
- Use um software cliente que permita fornecer a senha SSH no modo em lote (por exemplo, como opção de linha de comando, como STDIN ou como uma variável de ambiente). O OpenSSH NÃO suporta isso!
- Ou envolva um script 'expect' em torno de ssh / scp, conforme discutido em [2].
- Ou alterne de autenticação baseada em senha para pública.
Caso você queira dizer autenticação de chave pública com um arquivo de chave privada criptografado por frase secreta :
- Remova a proteção de frase secreta do arquivo de chave privada. [3]
- Ou pré-carregue a chave manualmente em um ssh-agent e verifique se (a) o ssh-agent ainda está ativo quando o script é executado e (b) se o script pode localizar o soquete unix do agente ($ SSH_AUTH_SOCK)