在远程 SSH 脚本中使用 nohup,在脚本内部

在远程 SSH 脚本中使用 nohup,在脚本内部

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

这有效:

ssh -n [email protected] '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,所以我甚至尝试在 SSH 行中捕获 stderr,如下所示

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

这可能吗?

答案1

pty我找到了问题所在;它与分配(-ttssh 上的标志)和 sudo有关。

TL;DR:只要远程脚本满足以下条件,这就能按我想要的方式工作:

  • 不需要 sudo
  • 如果他们需要 sudo,则远程用户对于相关操作具有 NO_PASSWORD sudo
  • 或者,也可以这样做没有 pty配置是使用-Ssudo 标志,通过 stdin 接受密码。我没有使用这种方法。
  • 所有输出均由远程脚本捕获

我使用了选项(2)——远程用户无需密码即可使用 sudo。

相关内容