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