3

Я вижу, что вы можете создать ключ SSH для использования rsync поверх ssh без запроса пароля.

Но я использую rsync поверх ssh в Eclipse/ANT, где пароль может быть введен в интерактивном режиме, но тогда взаимодействие между eclipse и командой rsync не является интерактивным (это один вызов exec из командной строки), поэтому мне нужно указать пароль, полученный в eclipse в командной строке.

Это возможно?

3 ответа3

3

После горячей битвы между мной и компьютером у меня наконец-то появился ответ, который не обсуждался ни в одной из статей, которые я мог найти. Я опубликую блог об этом.

Решение состоит в том, чтобы использовать новую функцию, исправленную только в альфа-версии ant 1.8.3, которая, по-видимому, является исправлением ошибки по сравнению с релизной версией 1.8.2, поэтому она, вероятно, достаточно стабильна даже с альфа-заголовком. Эта функция позволяет передавать данные в STDIN сценария, а именно в пароль. Затем вы можете использовать стандартные инструменты Linux или Cygwin в Windows, чтобы read пароль с STDIN и использовать его в качестве переменной.

Нет зависимостей, нет файлов ключей, нет утечки пароля в командной строке, нет сохраненных паролей. Наконец-то я вижу свет за пределами этого мрачного мрачного существования, которое я пережил за последние несколько дней.

Вот задача ANT, которая делает именно это:

<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 завершения процесса.

0

Поскольку вам известны две машины, вы можете безопасно игнорировать пароль от отдельного пользователя, а затем:

  1. дать rsync пользователю sudo права на rsync, чтобы они могли получить доступ ко всему

  2. настроить закрытый ключ / пароль без пароля, используя этого пользователя rsync с удаленного компьютера, и вызывая rsync с помощью sudo через ssh

Таким образом, пароль не будет иметь значения, и вы будете более защищены.

0

Вы можете просто использовать ssh-agent и keychain.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .