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.