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

Использование nohup в удаленном SSH-скрипте внутри самого скрипта

Я пытаюсь использовать оператор nohup + перенаправление + фон («&») для запуска удаленного скрипта через SSH и отключения.

Это работает:

ssh -n fred@fredbox.local 'nohup sudo /opt/scripts/do-thing.sh arg1 arg2 >/dev/null 2>&1 '

Я хочу инкапсулировать части nohup внутри оболочки, которая запускает фактический удаленный скрипт, но выполняет перенаправление nohup и вывода. Но это просто не работает.

Пример удаленного скрипта "/opt/scripts/remote-exec-script.sh":

#!/usr/bin/env bash
set -o xtrace
set -o errexit
set -o nounset

ARG1=${1}
ARG2="${2}

nohup sudo /opt/scripts/do-thing.sh $ARG1 $ARG2  >/dev/null 2>&1

Размещение nohup и перенаправления вывода в самом удаленном скрипте не работает.

У меня есть xtrace, поэтому я даже попытался захватить stderr в строке SSH вот так

ssh -n fred@fredbox.local "/opt/scripts/remote-exec-script.sh >/dev/null 2>&1"

Это вообще возможно?

Я понял проблему; это связано с pty распределение (-tt флаги по ssh) и sudo.

TL; DR: это работает так, как я хотел, пока удаленный сценарий удовлетворяет следующим условиям:

  • Не требует sudo
  • Если им нужно sudo, удаленный пользователь имеет NO_PASSWORD sudo для рассматриваемых операций.
  • Как вариант, это можно сделать без pty распределение используется -S флаг для sudo, чтобы принять пароль через stdin. Я этим методом не пользовался.
  • Весь вывод фиксируется удаленным скриптом

Я использовал вариант (2) - у удаленного пользователя есть sudo без пароля.