在不带 tty (-t) 的脚本中通过 ssh 在远程主机上运行时,sudo 挂起

在不带 tty (-t) 的脚本中通过 ssh 在远程主机上运行时,sudo 挂起

我有一个 AIX 6.1 服务器,我需要sudo在 bash 脚本中运行远程命令。

这是我的 bash 脚本的简化:

测试Sudo.sh

#!/usr/bin/bash
set -x

sudo env

我可以sudo在本地运行命令而无需密码:

[user@server]$ sudo env
VAR=VAL
...

我可以在本地运行该脚本:

[user@server]$ /tmp/testSudo.sh
+ sudo env
VAR=VAL
...

我可以sudo在远程主机上运行:

[user@client]$ ssh user@server sudo env
VAR=VAL
...

我可以使用 tty 在远程主机上运行脚本:

[user@client]$ ssh -t user@server /tmp/testSudo.sh
+ sudo env
VAR=VAL
...

我无法在没有 tty 的情况下在远程主机上运行脚本(并且我无法在上下文中添加 -t 选项):

[user@client]$ ssh user@server /tmp/testSudo.sh
+ sudo env

它挂在那里。

答案1

在没有终端的情况下执行时,Sudo 需要一个帮助程序来处理密码查询:

SUDO_ASKPASS    Specifies the path to a helper program used to read the
password if no terminal is available or if the -A option is specified.

通常,当您通过 ssh 和 sudo 连接时,需要输入密码,但未分配终端,则会报错 - 在 AIX 上,这可能会有所不同。

检查您的 sudo 设置并从所有远程计算机启用 NOPASSWD,正确的规则应该如下所示(将其添加到 /etc/sudoers 的末尾):

user ALL= NOPASSWD:/tmp/testSudo.sh

相关内容