rsync sobre ssh: A senha do ssh pode ser inserida na linha de comando?

3

Eu vejo que você pode criar uma chave SSH para usar o rsync em ssh sem um prompt de senha.

Mas estou usando o rsync sobre o ssh no Eclipse / ANT, onde a senha pode ser inserida interativamente, mas a interação entre o eclipse e o comando rsync não é interativa (é uma chamada de linha de comando exec), precisa especificar a senha obtida no eclipse na linha de comando.

Isso é possível?

    
por davidparks21 27.06.2011 / 05:35

3 respostas

3

Depois de uma batalha acalorada entre eu e o computador, finalmente tenho uma resposta que não foi discutida em nenhum artigo que encontrei. Eu vou postar um blog sobre isso.

A solução é usar um novo recurso corrigido apenas no lançamento alfa do ant 1.8.3, que parece ser apenas uma correção de bug sobre a versão de lançamento do 1.8.2, então provavelmente é estável o suficiente mesmo com o título alfa . Esse recurso permite que você passe dados para o STDIN do script, ou seja, a senha. Você pode usar as ferramentas padrão do Linux ou o Cygwin no Windows para read da senha do STDIN e usá-la como uma variável.

Sem dependências , sem arquivos de chave, sem senha perdida na linha de comando, sem senhas armazenadas. Eu finalmente vejo alguma luz além desta sombria e sombria existência que sofri nos últimos dias.

Aqui está uma tarefa ANT que faz exatamente isso:

<input message="Enter username for ${website.host}:" addproperty="host.username" />
<input message="Enter password for ${website.host}:" addproperty="host.password" />

<sshexec host="${website.host}" trust="true"
         username="${host.username}" password="${host.password}"
         inputstring="${host.password}"
         command='read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"' />

Observe a linha de comando:

read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"

Primeiro, read STDIN na variável var . Em seguida, acionamos expect , que realiza alguma ação que exige interação do usuário: sudo neste caso. Quando sudo solicitar a senha, nós a enviaremos da variável armazenada var e wait para o processo ser concluído.

    
por 28.06.2011 / 04:49
0

Como as duas máquinas serão conhecidas, você pode ignorar com segurança a senha do usuário individual e, em seguida:

  1. conceda a um usuário do rsync direitos de sudo rsync para que eles possam acessar tudo

  2. chave privada de configuração / sem senha login usando esse usuário rsync do máquina remota e invocando o rsync com sudo via ssh

Desta forma, a senha não importa e você estará mais seguro.

    
por 01.07.2011 / 01:58
0

Você pode simplesmente usar ssh-agent e keychain.

    
por 06.07.2011 / 01:44