после жаркой битвы между мной и компьютером, у меня наконец есть ответ, который не обсуждался ни в одной статье, которую я мог найти. Я напишу об этом в блоге.
решение: использовать новую функцию лишь в альфа-версии 1.8.3 муравья, который, кажется, просто исправить баг на версии 1.8.2, так что, вероятно, достаточно устойчиво даже с Альфа-титул. Эта функция позволяет передавать данные в стандартный поток ввода скрипта, а именно пароль. вы можете затем используйте стандартные инструменты linux или cygwin на windows до read
пароль от STDIN и использовать его в качестве переменной.
никаких зависимостей, нет ключевых файлов, нет утечки пароля в командной строке, нет сохраненных паролей. Я наконец-то вижу свет за пределами этого мрачного существования, которое я пережил за последние несколько дней.
вот муравей задача, которая делает именно это:
<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"' />
Примечание командной строки:
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"
Сначала мы read
STDIN в переменную var
. Затем мы запускаем expect
, который выполняет некоторые действия, требующие взаимодействия с пользователем:sudo
в этом случае. Когда sudo
запрашивает пароль, который мы отправляем из хранимой переменной var
и wait
для завершения процесса.