Близко, но не совсем.
Независимо от любого терминала
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Вам необходимо закрыть все файловые дескрипторы, которые подключены к сокету ssh, потому что сеанс ssh не закроется, пока какой-то удаленный процесс имеет открытый сокет. Если вас не интересует вывод скрипта (предположительно, потому что сам скрипт заботится о записи в файл журнала), перенаправьте его /dev/null
(но учтите, что это скроет ошибки, такие как невозможность запуска скрипта).
Использование nohup
здесь не имеет никакого полезного эффекта. nohup
организует, чтобы программа, с которой она работает, не получала сигнал HUP, если управляющий терминал программы исчезает, но здесь, во-первых, нет терминала, так что ничто не собирается отправлять сигнал SIGHUP процессу на ровном месте. Кроме того, nohup
перенаправляет стандартный вывод и стандартную ошибку (но не стандартный ввод) в файл, но только если они подключены к терминалу, чего, опять же, нет.
Отсоединение от терминала
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
Используйте nohup
для отсоединения скрипта от его управляющего терминала, чтобы он не получал SIGHUP, когда терминал исчезает. nohup
также перенаправляет стандартный вывод скрипта и стандартную ошибку в файл, который называется, nohup.out
если они подключены к терминалу; Вы должны позаботиться о стандартном вводе самостоятельно.
Ведение удаленного терминала
Если вы хотите, чтобы команда работала в удаленном терминале, но не была подключена к сеансу SSH, запустите ее в терминальном мультиплексоре, таком как Screen или Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Позже вы можете снова подключиться к терминалу, на котором запущен скрипт, вызвав screen -S backup -rd
от имени пользователя root на этом компьютере.
Автоматизация одной удаленной команды
Для немного лучшей безопасности не открывайте прямые удаленные root-логины слишком широко. Создайте пару ключей специального назначения и дайте ей принудительную команду /root/.ssh/authorized_keys
. Содержимое файла открытого ключа AAAA…== wibble@example.com
: добавить разделенный запятыми список параметров, в том числе command="…"
указывающий, что ключ может использоваться только для выполнения этой конкретной команды. Не забудьте сохранить параметры и ключ все в одной строке.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com