![在远程 SSH 脚本中使用 nohup,在脚本内部](https://linux22.com/image/706065/%E5%9C%A8%E8%BF%9C%E7%A8%8B%20SSH%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20nohup%EF%BC%8C%E5%9C%A8%E8%84%9A%E6%9C%AC%E5%86%85%E9%83%A8.png)
我正在尝试使用 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。