Назад | Перейти на главную страницу

Использование rsync поверх ssh с использованием открытого / закрытого ключа не работает

У меня есть сценарий, который находится в файле backup.sh (chmod 775):

rsync -e 'ssh -p 31234' -avlz --delete --stats --progress --copy-links admin@foo.xen.prgmr.com:/home/admin/rsync /home/myname/rsync/foo/

Когда я вызываю его вручную, все работает хорошо (и мне не нужно вводить кодовую фразу). Но когда я звоню из cron, просто не работает.

Я использовал ту же установку на компьютере моего коллеги (у которого такой же доступ, как и у меня), и она работает хорошо.

В чем дело?

У меня есть настройка входа в систему SSH без пароля. Я использую такую ​​команду: rsync --delete -auve 'ssh -i /home/red/.ssh/cron_jobs_key' red@othermachine:/source/dir1 /dest/dir2

Ключ здесь "-i /home/red/.ssh/cron_jobs_key"где я настроил вход по ssh без пароля. В противном случае мне пришлось бы вводить свой ssh-ключ при входе на локальный компьютер. Я создал этот ssh-ключ специально для заданий cron.

Некоторые подсказки:

  • Проверьте свою локальную электронную почту (если вы ее настроили). Cron отправит по электронной почте вывод запланированных команд.
  • Убедитесь, что rsync находится в вашем PATH. Вы можете проверить это, запустив команду env в задании cron или включив команду env в существующий скрипт. Т.е. добавьте строку: "env> /tmp/env_output.txt" и затем изучите этот файл.
  • Вы можете определить переменную PATH в верхней части вашего crontab:

ПУТЬ = / sbin: / bin: / usr / sbin: / usr / bin

упомянув, что вам не нужно вводить парольную фазу, я предполагаю, что вы используете ssh-agent для ввода его один раз за сеанс.

Это не будет работать с cron, поскольку cron не имеет доступа к вашей переменной SSH_AUTH_SOCK, потому что он был запущен при запуске машины, а не в текущем сеансе.

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