在脚本本身内部使用远程SSH脚本的nohup

我正尝试使用nohup +redirect+后台运算符(“&”)通过SSH运行远程脚本并断开连接。

这工作:

ssh -n [email protected] 'nohup sudo /opt/scripts/do-thing.sh arg1 arg2 >/dev/null 2>&1 ' 

我想将nohup部分封装在运行实际远程脚本的包装器中,但不执行nohup和输出redirect。 但它不起作用。

示例远程脚本“/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和输出redirect不起作用。

我有xtrace,所以我甚至尝试在SSH线路捕获stderr像这样

 ssh -n [email protected] "/opt/scripts/remote-exec-script.sh >/dev/null 2>&1" 

这甚至有可能吗?

我解决了这个问题; 它必须与pty分配(在SSH上-tt标志)和sudo。

TL; DR:只要远程脚本满足以下条件,就可以按照我的要求工作:

  • 不需要sudo
  • 如果他们需要使用sudo,则远程用户对所述操作具有NO_PASSWORD sudo
  • 另外,一个人可以做到没有 pty分配是一个使用-S标志为sudo,通过标准input接受密码。 我没有使用这种方法。
  • 所有输出都由远程脚本捕获

我用选项(2) – 远程用户有无密码sudo。