Простой rsync в crontab без пароля
Я хотел бы запустить следующее: (Centos 5.4)
rsync -avz /source_folder 192.168.1.1:/destination_folder
сейчас я запускаю его из CLI, но в конце концов я бы хотел запустить его из crontab (пользователь:root).
когда я его запускаю, он всегда просит ввести пароль root. Я хочу пропустить пароль. Я видел несколько ответов по этому поводу, но он либо не работает, либо я не уверен, что полностью понимаю, как это сделать. кто-нибудь может помочь?
3 ответа
Как уже говорили другие, вы можете сделать это с помощью ssh-ключей без пароля. Это по своей сути небезопасно, и вам нужно предпринять дополнительные шаги, чтобы добавить безопасность обратно в процесс. Что я делаю, так это ограничиваю использование ключа хостом и командой. Я написал это из своих заметок, я не думаю, что пропустил какие-либо шаги.
Первое, что нужно сделать, - это создать пару открытых ключей, которые будут использоваться исключительно для этого процесса резервного копирования. Когда вас попросят ввести пароль, дважды нажмите клавишу ввода.
ssh-keygen -t rsa -b 2048 -C "For Backup use only"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root/.ssh/id_rsa): /root/.ssh/backup.id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/backup.id_rsa.
Your public key has been saved in /root/.ssh/backup.id_rsa.pub.
The key fingerprint is:65:c0:cb:2b:9e:18:ff:b2:59:d4:b5:e8:ae:84:32:2b
Передать открытый ключ /root/.ssh/backup.id_rsa.pub
на удаленный хост и добавьте его в /root/.ssh/authorized_keys
файл.
На удаленном хосте ограничьте использование открытого ключа, добавив from=
а также command=
ограничения. Изменить /root/.ssh/authorized_keys
файл, найдите резервную копию ключа и добавьте адрес / имя хоста, на котором будет выполняться задание cron, а также команду для запуска. Эта команда будет запущена, когда что-то входит в систему с этим ключом, например
from="192.168.254.207",command="/root/checkrsync",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3N...
Вы можете использовать этот ключ только из 192.168.254.207, и вы можете только запустить команду /root/checkrsync, и другие функции также были удалены.
Отредактируйте файл /root/checkrsync следующим образом
echo $SSH_ORIGINAL_COMMND >/tmp/rsync.cmd
сохранить и сделать его исполняемым
chmod 700 /root/checkrsync
Мы изменим /root/checkrsync
позже, когда мы узнаем, что такое $SSH_ORIGINAL_COMMAND.
На хосте, где мы будем выполнять задание cron, запустите команду rsync в интерактивном режиме
/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder root@remote.host:/destination_folder
Не беспокойтесь о каких-либо сообщениях об ошибках, мы только хотим создать файл /tmp/rsync.cmd на удаленном хосте
На удаленном хосте запишите содержимое файла /tmp/rsync.cmd (это будет что-то вроде rsync --server -vlogDtprze.iLs . /destination_folder
).
На удаленном хосте отредактируйте /root/checkrsync
и изменить его на
if [[ "$SSH_ORIGINAL_COMMAND" == "rsync --server -vlogDtprze.iLs . /destination_folder" ]]
then
$SSH_ORIGINAL_COMMAND
fi
где правая часть оператора if - это то, что было в /tmp/rsync.cmd.
Проверьте настройку. На хосте, где мы будем запускать задание cron, снова запустите команду rsync в интерактивном режиме
/usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder root@remote.host:/destination_folder
Теперь он должен работать правильно, если он установит его в ваш crontab.
crontab -e
* 1 * * * /usr/bin/rsync -avz -e "/usr/bin/ssh -i /root/.ssh/backup.id_rsa" /source_folder root@remote.host:/destination_folder
Вам необходимо настроить аутентификацию ssh-ключа без пароля.
При настройке учитывайте соображения безопасности. Я рекомендую использовать список доступа к узлу, чтобы ограничить исходный IP-адрес с помощью ключа.
Проверьте следующую ссылку для настройки ключей SSH. Ключи SSh помогут вам установить пароль без входа в систему через ssh.
http://techtrunch.com/linux/ssh-keys
Настройка CRON:
- Войдите в систему как root
Откройте терминал и введите
crontab -e
, затем введите следующее1 * * * * rsync -avz /source_folder 192.168.1.1:/destination_folder
Заметка
Это будет работать каждый час.
Для ssh без пароля (или rsync через ssh) вам понадобится пара ключей без ключевой фразы.
Вы можете сгенерировать вашу пару (закрытый и открытый ключ) на исходном компьютере: ssh-keygen -t rsa
(в ~/.ssh/id_rsa
), затем добавьте свой открытый ключ (содержимое ~/.ssh/id_rsa.pub
) к месту назначения машины ~/.ssh/authorized_keys
,
Прочитайте всю статью о резервных копиях cron rsync: https://medium.com/@deltazero/linux-remote-backup-rsync-chroot-d797ba6babe5