[英]“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.