私は 3 台のマシンを持っておりssh
、それらを 1 台ずつ操作してから、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();
}
私の問題は、このプログラムを使用して、所有している 3 台のマシンのうち 2 台の eedir サービスのステータスを正常に取得できるが、最後の 1 台では取得できないことです。
指定したユーザー名でリモート マシンに ssh し、次のコマンドを直接実行できます。
sudo /etc/init.d/eedir status
ssh で使用されるユーザー名は、 my で既に構成されています/etc/sudoers
。
だから、私の質問は次のとおりです。
なぜ JSch は 3 台のマシンのうち 2 台でこのプログラムを実行できるのに、残りの 1 台では実行できないのでしょうか? sudoers の構成は、これらのマシンでまったく同じです。
もう 1 つの質問は、sudoers で現在のユーザーを構成した場合、実際のマシンで sudo をパスワードを再入力せずに実行できるのに、JSch sudo はプログラムでパスワードを要求するのはなぜですか?
どんな指示でも本当に感謝しています。現在の状況でエラーが発生する可能性がある場合は、どなたでもご指摘いただければ幸いです。
ありがとう。