JSch:须藤 有时不工作(JSch: sudo sometimes not w

2019-10-16 23:36发布

我有三台机器,我需要ssh一个给他们一个,然后一个执行sudo命令。

我需要的JSch做以下的事情:

ssh <user>@<machine>
sudo <some command>

这是代码块我如何使用运行JSch:

String homeFolder = System.getProperty("user.home");
JSch jsch = new JSch();
jsch.addIdentity(homeFolder + "/.ssh/id_rsa.pub");
jsch.setKnowHosts(homeFolder + "/.ssh/known_hosts");

final Session session = jsch.getSession(user, machine);
session.connect();

StringBuilder response = new StringBuilder();
try {
    final Channel channel = session.openChannel("exec");
    ((ChannelExec) channel).setCommand("sudo /etc/init.d/eedir status")
    channel.connect();

    try {
        InputStream in = channel.getInputStream();
        OutputStream out = channel.getOutputStream();

        out.write((password + System.getProperty("line.separator")).getBytes());

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while (null != (line = reader.readLine())) {
            System.out.println(line);
        }
    } finally {
        channel.disconnect();
    }
} finally {
    session.disconnect();
}

我的问题是,我可以使用该程序成功获得eedir服务的状态在两个三个机我有,但不是最后一个。

我可以ssh到远程机器用给定的用户名,然后直接运行下面的命令:

sudo /etc/init.d/eedir status

在SSH使用的用户名,我已经配置/etc/sudoers

所以,我的问题是:

  1. 为什么JSch可以在两个三台机的运行这个程序,而其余一个不能? 在sudoers'的配置exactlly在这些机器上是相同的。

  2. 而另一个问题是:为什么在真机上,sudo命令可以无需再次输入密码,如果我配置在sudoers中当前用户运行,而JSch须藤需要在程序中的密码?

任何方向都非常赞赏。 如果有可能我在我目前的情况下,一些潜在的错误,欢迎大家指出来。

谢谢。

Answer 1:

  1. 你从失败的机器上的jsch须藤试图得到什么输出? 让你可能需要的错误输出:

     (ChannelExec)commandChannel.getErrStream(); 

    SSH服务器可能有不同的设置。 我的服务器上,你需要PTY:

     (ChannelExec)commandChannel.setPty(true); (ChannelExec)commandChannel.setPtyType("VT100"); 
  2. 通常你只需要为每个会话一次输入密码sudo的。 也许真正的机器上,你已经做了须藤一次,并没有退出。 上面的代码每次重新连接,因此需要每次发送密码。



Answer 2:

我对CentOS的同样的问题。 要解决它
1)你的频道的set命令之后:

((ChannelExec) channel).setPty(true);

2)请确保您有finally块/ s到关闭输入流,通道和会话

注意:如果用户不需要密码,您不必打开输出流(不像在上面的例子所显示的)



Answer 3:

该最新版本至今已经使用示例Java类sudo远程主机上的命令。 下载项目.zip文件,因为他们是一个原因,只有上帝才知道分开的.jar两个!



文章来源: JSch: sudo sometimes not working
标签: sudo jsch