从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
。
我该如何解决这个问题?
答案 0 :(得分:0)
fastlane tools中有requiretty
选项,您最有可能设置这些选项。
JSch by不为exec
频道分配伪终端。
删除requiretty
选项。这是唯一正确的选择。
如果你不能删除它,你可以通过调用:
强制JSch分配伪终端channelExec.setPty(true);
另见sudoers
。
但这不是一个好选择,因为它可以带给你很多令人讨厌的副作用。伪终端旨在用于交互式使用,而不是用于自动执行命令。
有些例子,请参阅
sudo
也是如此。您不应该自动sudo
。正确的解决方案是设置专用私钥,仅具有任务所需的权限。