Я использую rsync для развертывания кода на удаленном сервере, и в настоящее время у меня есть кодовая фраза для ключа безопасности. Как я могу добавить кодовую фразу в команду rsync без приглашения использовать ее в сценарии?
Я не использую rsync-daemon.
Моя команда:
rsync -vaz -e "ssh -i /root/.ssh/key.ppk" --chmod=ugo=rwX --omit-dir-times --no-perms . user@domain.com:/var/www/html
Сделайте вашу безопасность независимой от пароля закрытого ключа, вместо этого ограничив использование ключа на стороне сервера:
rrsync
. (Обычно он устанавливается с пакетом rsync,возможно, в / usr / share / doc / rsync-VERSION / support
. command="/path/to/rrsync /var/www/html/",no-pty,no-port-forwarding,no-user-rc,no-X11-forwarding,no-agent-forwarding,from="IPADRESS" ssh-rsa AAA[...]
Теперь у вас есть ключ, который можно использовать только для одного - для rsync вещей с одного сервера в каталог / var / www / html. Ограничения на стороне сервера означают, что даже если кто-то другой завладеет ключом, разрушение, которое он может нанести, очень ограничено и, конечно, намного меньше, чем если бы они завладели паролем к ключу, который обеспечивает полный доступ.
Вы можете сохранить ключ ssh на диске с парольной фразой и, когда хост загружается, разблокировать ключ в ssh-agent.
Затем при запуске rsync убедитесь, что установлены правильные переменные среды, позволяющие использовать агент.
При загрузке, вручную:
ssh-agent >$HOME/.ssh/agent_env # will start a new ssh agent and store the details
. $HOME/.ssh/agent_env # will load the stored environment into this shell
ssh-add $HOME/.ssh/key.ppk # will prompt for passphrase
Затем при запуске rsync используйте небольшой сценарий оболочки для создания файла agent_env
, как указано выше:
#!/bin/sh
if [ ! -e $HOME/.ssh/agent_env ]
then
No ssh agent details
exit 1
fi
. $HOME/.ssh/agent_env
rsync ...
Для уверенности используйте @reboot
задание cron для пользователя root по удалению файла $ HOME / .ssh / agent_env
:
@reboot rm $HOME/.ssh/agent_env
Вы говорите, что у вас есть открытый ключ, установленный на удаленном сервере, для которого требуется пароль (т.е. ключ RSA, созданный процессом генерации ключей ssh)?
Если да, пробовали ли вы что-либо из этого два метода?
Как будет выглядеть результат, когда вы попытаетесь это сделать? У меня есть коллега, который написал много таких сценариев в своей карьере, поэтому я могу спросить его, есть ли у меня пример того, что вы видите.
Дайте мне знать.