Como passar a senha ao comando scp usado no script bash? [duplicado]

38

Eu tenho um script bash que faz o despejo do banco de dados, copia o arquivo de um servidor para outro, mas sempre pede senha antes da conexão.

scp file.tar.gz [email protected]:/backup

Existe uma maneira de passar a senha diretamente para o script?

    
por chubbyk 04.10.2011 / 19:59

6 respostas

56

Use a ferramenta sshpass

sshpass -p 'password' scp file.tar.gz [email protected]:/backup 
    
por 02.08.2012 / 13:52
40

Em vez de usar o root, crie uma conta apenas para esse trabalho. Use chaves públicas sem uma frase secreta em vez de senhas.

scp -i /home/backupuser/.ssh/id_rsa [email protected]:/backup

Ao usar uma conta especial para o backup no sistema de destino, você não está expondo sua senha de root.

    
por 04.10.2011 / 20:10
4

É melhor configurar o ssh para usar a autenticação baseada em chave, em vez de tentar descobrir como enviar texto para o processo de login com algo como expect .

Dê uma olhada:

link

Portanto, basicamente, execute ssh-keygen -t dsa na máquina que executará seu script. Quando lhe pedir uma senha, pressione ENTER para aceitar um espaço em branco. Você receberá dois arquivos. Se você seguiu as sugestões padrão, os arquivos serão ~ / .ssh / id_dsa e ~ / .ssh / id_dsa.pub. O primeiro é a chave privada. O segundo é a chave pública.

Copie a chave pública para o segundo servidor usando ssh-copy-id user@server2 . Isso adicionará a chave pública ao arquivo authorized_keys do usuário no servidor2.

Agora você deve ser capaz de executar o ssh a partir da primeira máquina e efetuar login sem uma senha.

Para copiar os arquivos, scp ou rsync estão bem. Depende do que você está fazendo. O rsync usará o ssh por padrão, então usará a autenticação baseada em chave que você acabou de configurar.

    
por 23.03.2012 / 10:50
2

scp usa SSH para encapsular em um servidor remoto e transferir arquivos. SSH pode autenticar usuários com uma senha, uma chave SSH ou ambas (recomendado).

Para transferir arquivos sem uma senha, crie uma SSH key para o usuário que você vai usar (root é não recomendado, use um usuário não privilegiado e tenha um trabalho no servidor de destino como root para executar a ação privilegiada).

Em seguida, você precisa configurar o daemon SSH do sistema de destino para aceitar as conexões de chave SSH (também no link acima).

Lembre-se de que as chaves SSH comprometidas sem uma senha são iguais às senhas comprometidas - qualquer pessoa pode entrar. Para usuários reais, é melhor duplicar a segurança e exigir a chave e uma senha.

    
por 04.10.2011 / 20:09
1

pscp permite que você passe a senha diretamente usando o argumento -pw. Como alternativa, e esta é uma idéia melhor, use o agente ssh e configure o logon baseado em chave - isso é mais seguro. Há um tutorial sobre como configurar o ssh para usar o logon baseado em chave aqui

Você pode usar o comando sim para enviar um sim ao programa.

    
por 23.03.2012 / 10:48
0

Você deve não usar chaves ssh sem senha por motivos de segurança.

A ferramenta keychain pode ajudá-lo a reutilizar o ssh-agent e executar rsync por ssh em scripts sem ser solicitado por senhas.

Para instalá-lo em uma máquina Ubuntu, apenas execute o seguinte comando.

sudo apt-get install keychain

Confira a página de man do keychain para mais informações sobre como usá-la.

    
por 23.03.2012 / 11:02