Po gorącej walce między mną a komputerem, w końcu mam odpowiedź, która nie została omówiona w żadnym artykule, który mógłbym znaleźć. Opublikuję na ten temat bloga.
Rozwiązaniem jest użycie nowej funkcji naprawionej tylko w wersji alpha ant 1.8.3, która wydaje się być poprawką w stosunku do wersji 1.8.2, więc prawdopodobnie jest wystarczająco stabilna nawet z tytułem alfa. Ta funkcja umożliwia przekazywanie danych do STDIN skryptu, a mianowicie hasła. Następnie możesz użyć standardowych narzędzi linux lub cygwin na Windows read
hasło wyłącz STDIN i użyj go jako zmiennej.
Brak zależności , brak plików kluczy, brak wyciekającego hasła w wierszu poleceń, brak zapisanych haseł. W końcu widzę trochę światła poza mroczną, ponurą egzystencją, której doznałem w ciągu ostatnich kilku dni.
Oto zadanie ANT, które właśnie to robi:
<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"' />
Zwróć uwagę na wiersz polecenia:
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"
Najpierw, my read
STDIN na zmienną var
. Potem strzelamy expect
który wykonuje pewne czynności wymagające interakcji użytkownika: sudo
w tym przypadku. Gdy sudo
monituje o hasło, które wysyłamy z przechowywanej zmiennej var
i wait
aby proces się zakończył.
ps -ef
). Nie rób tego.