scp dentro do sh-script com passphrase

5

Eu tenho um sh-script para um backup

scp /mybackupdir/* backupuser@backupserver:/backup

Existe uma maneira fácil de adicionar uma frase secreta ao scp? Ou eu tenho que verificar se um agente ssh está em execução e se não iniciar um e adicionar a chave?

    
por Stephan Weinhold 20.08.2014 / 16:30

4 respostas

6

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)
  • [1] No caso do OpenSSH, por ex. ~ / .ssh / id_dsa e ~ / .ssh / id_dsa.pub. O conteúdo deste último deve ser adicionado ao ~ / .ssh / authorized_keys do lado do servidor
  • [2] link
  • [3] link
por 20.08.2014 / 18:12
6

Você não pode fornecer passphrase para scp com argumentos.

No entanto, você pode usar autenticação por chave: ssh-keygen irá gerar um par de chaves rsa para autenticação O ssh-copy-id copiará sua chave pública para outro host.

se você não puder ou não quiser usar a autenticação por chaves, poderá escrever o script "Esperar" e fornecer a senha deste script. Não é a maneira mais segura de implementar isso!

    
por 20.08.2014 / 16:41
1

Você deve ler este post:

3 etapas para efetuar o login SSH sem senha usando o ssh-keygen

e você pode alterar seu script para isso:

rsync --rsh='ssh -p(Type your SSH port)' -av /yourBackupDir [email protected]:/backup | mail -s "backup on 'hostname'" [email protected]
    
por 20.08.2014 / 16:55
1

Você não precisa de ssh-agent para autenticação de chave pública. Você pode simplesmente passar a chave necessária para ssh ou scp com o argumento de linha de comando -i .

    
por 22.08.2014 / 17:54