我有三台机器,我需要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
。
所以,我的问题是:
为什么JSch可以在两个三台机的运行这个程序,而其余一个不能? 在sudoers'的配置exactlly在这些机器上是相同的。
而另一个问题是:为什么在真机上,sudo命令可以无需再次输入密码,如果我配置在sudoers中当前用户运行,而JSch须藤需要在程序中的密码?
任何方向都非常赞赏。 如果有可能我在我目前的情况下,一些潜在的错误,欢迎大家指出来。
谢谢。