Выполнить команду rsync из сценария без запроса ключевой фразы

Я использую 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
0
задан 23 May 2018 в 20:08
3 ответа

Сделайте вашу безопасность независимой от пароля закрытого ключа, вместо этого ограничив использование ключа на стороне сервера:

  1. Создайте отдельную пару ключей, используемую только для rsync. Сделайте этот закрытый ключ беспарольным.
  2. Убедитесь, что на сервере есть сценарий rrsync . (Обычно он устанавливается с пакетом rsync,возможно, в / usr / share / doc / rsync-VERSION / support .
  3. Добавьте открытую часть ключа к authorized_keys целевого пользователя на сервере. В начале строки добавьте нагрузку ограничения, чтобы гарантировать, что ключ может использоваться только с правильного сервера и только для rsync вещей в определенном каталоге, например:
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. Ограничения на стороне сервера означают, что даже если кто-то другой завладеет ключом, разрушение, которое он может нанести, очень ограничено и, конечно, намного меньше, чем если бы они завладели паролем к ключу, который обеспечивает полный доступ.

1
ответ дан 4 December 2019 в 13:26

Вы можете сохранить ключ 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
1
ответ дан 4 December 2019 в 13:26

Вы говорите, что у вас есть открытый ключ, установленный на удаленном сервере, для которого требуется пароль (т.е. ключ RSA, созданный процессом генерации ключей ssh)?

Если да, пробовали ли вы что-либо из этого два метода?

  1. Установите для переменной среды RSYNC_PASSWORD пароль (может быть виден другим пользователям).
  2. укажите его в опции командной строки --password-file. Этот вариант более безопасен, если файл паролей НЕ доступен для чтения всем.

Как будет выглядеть результат, когда вы попытаетесь это сделать? У меня есть коллега, который написал много таких сценариев в своей карьере, поэтому я могу спросить его, есть ли у меня пример того, что вы видите.

Дайте мне знать.

0
ответ дан 4 December 2019 в 13:26

Теги

Похожие вопросы