"须藤"使用JSch执行的命令需要密码,即使在交互式SSH会话中不需要密码也是如此

时间:2018-02-02 07:53:59

标签: java ssh sudo jsch

从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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

fastlane tools中有requiretty选项,您最有可能设置这些选项。

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

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

如果你不能删除它,你可以通过调用:

强制JSch分配伪终端
channelExec.setPty(true);

另见sudoers

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

有些例子,请参阅

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