使用 JSch 执行的“sudo”命令需要密码,即使在交互式 SSH 会话中不需要密码

问题描述 投票:0回答:1

从 Linux 命令 shell 中,我可以使用用户

ABC
与我们的 CentOS 计算机建立 SSH 连接。 SSH 连接成功后,我可以运行
sudo
命令,不需要密码。

sudo /usr/bin/rootsh -i -u root

在 JSch 程序中,我使用用户

ABC
建立 SSH 连接,然后执行上述命令,但它询问我:

[sudo] password for [**ABC**]

我正在使用以下代码打开一个频道:

session.openChannel("exec");

我不明白为什么它要求密码,即使不需要密码。它还要求

ABC
的密码,但在我的
sudo
命令中,我已指定用户
root

如何解决这个问题?

java ssh sudo jsch
1个回答
0
投票

您很可能已经设置了

requiretty
 中的 
sudoers
选项。

JSch by 不会为

exec
通道分配伪终端。

删除

requiretty
选项。这是唯一正确的选择。

如果无法删除它,可以通过调用以下命令强制 JSch 分配伪终端:

channelExec.setPty(true);

另请参阅使用 JSch sudo 示例和 Channel.setPty 在远程主机上运行 sudo 命令

但这不是一个好的选择,因为它会给你带来很多讨厌的副作用。伪终端旨在用于交互式使用,而不是用于自动执行命令。

有关一些示例,请参阅

sudo
也是如此。你不应该自动化
sudo
。正确的解决方案是设置一个专用私钥,仅具有您的任务所需的权限。

© www.soinside.com 2019 - 2024. All rights reserved.