sudo 通过 ssh 提示输入密码

sudo 通过 ssh 提示输入密码

我已在“hostname”上为用户(myuser)设置了 sudo,如下所示(sudoers 内容):

Cmnd_Alias SCRIPT=/路径/脚本*
myuser ALL=(suser) NOPASSWD:脚本

这工作正常,所以我可以运行以下命令,以主机名上的 myuser 身份本地登录,而无需输入密码:

sudo -u suser /路径/脚本

但是,当我使用 ssh(已设置密钥,因此不需要密码)登录并运行时,如下所示:

ssh 主机名 sudo -u suser /路径/脚本

系统提示我输入密码,输入密码后我得到:

抱歉,用户 myuser 无权以 suser 身份在主机名上执行“/path/script”

更新 通过在 sudoers 中从命令末尾删除“*”可以解决问题。添加 * 是为了允许将参数传递给脚本,但实际上似乎没有必要。仍然不明白为什么 * 允许 sudo 在本地工作,但不能通过 ssh 工作。所以问题仍然存在

答案1

您没有在 sudoers 中指定主机,因此它只能在本地工作,因为您现在已经设置好了它。

因此如果将主机参数设置为 ALL,它将在任何主机上运行。

人 sudoers

保留字 ALL 是内置别名,它始终会导致匹配成功。它可以用在可能使用 Cmnd_Alias、User_Alias、Runas_Alias 或 Host_Alias 的任何位置。

...

默认情况下,如果 NOPASSWD 标记应用于当前主机上用户的任何条目,则该用户将能够在没有密码的情况下运行 sudo -l。此外,如果 NOPASSWD 标记存在于与当前主机相关的所有用户条目中,则用户只能在不使用密码的情况下运行 sudo -v。此行为可以通过 verifypw 和 listpw 选项覆盖。

以下内容在终端上运行的额外事实似乎证实了主机是您收到提示的原因。

$ ssh 主机名

$ sudo -u 用户/路径/脚本

答案2

您显示的 sudoers 文件的语法不正确,visudo 不允许您使用该语法创建文件。它应该是这样的

testuser hostname=(user) NOPASSWD: /path/script*

使用此语法,我可以 ssh 到主机名并执行脚本,而无需输入密码。

编辑

从评论来看,您的 sudoers 文件中似乎存在配置错误。这似乎与行中的 Host_Alias 或主机名规范部分有关。

我已经在 CentOS 6 系统上设置了一个测试用户,并尝试了各种配置,但找不到一个在我本地登录时可以工作但在通过 ssh 尝试访问时拒绝我访问的配置。

相关内容