Я пытаюсь создать задание cron, которое использует ssh для входа на удаленный сервер и запуска сценария от имени другого пользователя. Я пытаюсь:
* * * * * source $HOME/.keychain/$HOST-sh && sudo -u $USER $PATH/$SCRIPT
но это не работает, потому что для ssh не указана опция -t. Задание cron должно получить файл связки ключей, чтобы работать без пароля, но я не уверен, где в этом случае включить параметр -t для ssh.
Вам не нужен брелок.
используйте ssh-keygen, создайте новую пару ключей. удалите открытый ключ на целевой сервер и префикс его командой, подобной этой
command="/bin/ls" ssh-dss YOURKEEEEEEEYHERE ==comment
в .ssh / authorized_keys на этом удаленном хосте
когда это будет настроено, вы сможете запустить именно эту команду на удаленном хосте через ssh без пароля.
1) Создайте пару ключей ssh "ssh-keygen -f / some / path / mykey" и не давайте ей парольную фразу.
2) Скопируйте это в файл authorized_keys удаленного пользователя «ssh-copy-id -i / some / path / mykey remoteuser @ remotehost»
3) Создайте задание cron «echo '8 * * * * ssh -i / some / path / mykey remoteuser @ remotehost / path / to / some / command' | crontab -»
4) В идеале отредактируйте ~ remoteuser / .ssh / authorized_keys так, чтобы ключ имел префикс command = "/ path / to / some / command"
Если на самом деле вы хотите войти на удаленный хост как один пользователь (например, remoteuser1), а затем использовать sudo для запуска команды от имени другого пользователя (например, remoteuser2). Вам нужно будет установить sudo на удаленном хосте, чтобы первый пользователь мог запускать команду от имени второго пользователя без ввода пароля, что-то вроде этого ins / etc / sudoers -
remoteuser1 ALL = (remoteuser2) NOPASSWD: / путь / к / некоторой / команде
Затем выполните задание cron на локальном хосте "ssh -i / some / path / mykey remoteuser @ remotehost sudo / path / to / some / command"