у меня есть cronjob:
0 9 * * * rsync -a mydir remote_machine:
я установил это с помощью 'crontab -e'. у меня работает ssh-agent, и когда я выполняю саму команду rsync, она работает без какого-либо взаимодействия с пользователем или ввода пароля, но cronjob завершается неудачно со следующим сообщением:
Date: Wed, 9 Dec 2009 11:11:00 -0600 (CST)
From: Cron Daemon <me@my_machine.my_domain>
To: me@my_machine.my_domain
Subject: Cron <me@my_machine> rsync -a /home/me/mydir remote_machine:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452)
[sender=2.6.9]
почему это не работает? я знаю, что cronjobs запускаются со мной как пользователь (если я запускаю '* * * * * touch / tmp / a', у меня есть файл), поэтому я предполагаю, что rsync входит как я, используя свой закрытый ключ ...
Брелок для ключей - это то, что вам нужно! Просто установите его и добавьте следующий код в свой
.bash_profile
(или эквивалентный):Для config.fish ( 2 ):
Затем используйте приведенный ниже код в вашем скрипте для загрузки переменных среды ssh-agent:
Для рыбы:
Если у вашего ключа есть фраза-пароль, связка ключей будет спрашивать вас один раз (действует до тех пор, пока вы не перезагрузите компьютер или не убьете ssh-agent).
Примечание: цепочка для ключей также генерирует код
csh
иfish
оболочки, поэтому просто замените суффикс "-sh" на "-csh" или "-fish".источник
У меня недостаточно представителя, чтобы проголосовать за первый ответ, но это решило проблему, с которой я столкнулся. С точки зрения ssh-agent у вас уже может быть один запущенный. Вот скрипт для извлечения SSH_AGENT_PID & SSH_AUTH_SOCK из среды без каких-либо дополнительных вещей, чтобы сэкономить при запуске ssh-agent. (Предполагается, что у вас есть Perl)
Поместите следующее в сценарий. (например, findagent.pl)
и внутри вашего cron-скрипта добавьте строку:
eval `{путь к сценарию} / findagent.pl`
источник
Я полагаю, вы используете аутентификацию на основе ключей для аутентификации на удаленном компьютере. Попробуйте строку ниже:
Где .ssh / id_rsa - путь к вашему личному ключу. Именно эту линию я использую для резервного копирования, и она всегда отлично работает для меня.
С наилучшими пожеланиями,
Фабиан
источник
В качестве альтернативы, вместо использования агента ssh я заставил свой скрипт выполнить экспорт RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" unset SSH_AGENT_PID unset SSH_AUTH_SOCK перед вызовом rsync. Поместив его в RSYNC_RSH вместо '-e ...', вы упростили настройку используемого id-файла в зависимости от хоста.
Надеюсь, это поможет, B
источник