需要从machine1建立远程ssh到machine2。使用ssh尝试下面的代码,但不是succssfull。在sshpass请求之前和之后执行文件创建命令以进行验证。文件在Machine1中创建,但在Machine2中不起作用。 请帮忙。还有其他选择
String Cl_samp= new String("sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no root@XXX.XX.115.71");
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session_r=jsch.getSession(user, XXX.XX.115.70, 22);
session_r.setConfig("StrictHostKeyChecking", "no");
session_r.setPassword(password);
session_r.setConfig(config);
session_r.connect();
ChannelExec(session_r, "ls -la >>result.txt")
ChannelExec(session_r, Cl_samp);
ChannelExec(session_r, "ls -la >>result.txt")
session_r.disconnect();
System.out.println("DONE");
}catch(Exception e){
e.printStackTrace();
}
private void ChannelExec(Session session_1, String Serv_cmd) throws IOException{
try {
Channel channel;
channel = session_1.openChannel("exec");
((ChannelExec)channel).setCommand(Serv_cmd);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
channel.connect();
System.out.print("Server-"+"command:"+Serv_cmd+" \n");
channel.disconnect();
} catch (JSchException ex) {
Logger.getLogger(ContactEditorUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:0)
ChannelExec(session_r, "ls -la >>result.txt")
ChannelExec(session_r, Cl_samp);
ChannelExec(session_r, "ls -la >>result.txt")
您创建的每个频道都将独立运行。在常见情况下(与unix服务器建立ssh连接),每个通道都将调用一个单独的shell实例,该实例运行您指定的命令然后退出。在一个频道中运行ssh
不会影响在不同频道中发布的后续命令。
要在第二台主机上调用ssh并让它在第三台主机上运行命令,你需要通过一个exec通道完成整个过程,如下所示:
String Cl_samp= "sshpass -p '...' ssh -o ... root@... 'ls -la >>result.txt'";
ChannelExec(session_r, Cl_samp);
这会将要调用的命令添加到ssh
命令行,这会导致ssh(在第二个主机上运行)请求在第三个主机上运行命令。