Близько, але не зовсім.
Незалежно від будь-якого терміналу
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/.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