我正在尝试使用 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
我找到了问题所在;它与分配(-tt
ssh 上的标志)和 sudo有关。
TL;DR:只要远程脚本满足以下条件,这就能按我想要的方式工作:
- 不需要 sudo
- 如果他们需要 sudo,则远程用户对于相关操作具有 NO_PASSWORD sudo
- 或者,也可以这样做没有
pty
配置是使用-S
sudo 标志,通过 stdin 接受密码。我没有使用这种方法。 - 所有输出均由远程脚本捕获
我使用了选项(2)——远程用户无需密码即可使用 sudo。