繁体   English   中英

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

[英]“sudo” command executed with JSch requires password, even when the password is not required in an interactive SSH session

从Linux命令外壳,我可以使用用户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用户。

我怎么解决这个问题?

您很可能已设置了sudoers中的requiretty选项。

JSch by不为exec通道分配伪终端。

删除requiretty选项。 那是唯一正确的选择。

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

channelExec.setPty(true);

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

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

有关示例,请参见

sudo也是如此。 您不应该自动执行sudo 正确的解决方案是设置仅具有任务所需特权的专用私钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM