Выполнение s sh на удаленном сервере для перехода на другой сервер и выполнения там дальнейших команд, используя Java и JSch - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь выполнить несколько команд на удаленном компьютере, хотя S SH с использованием библиотеки JSch. Я почти там, но застрял в одной команде.

Я использую две удаленные машины, скажем, RM1 и RM2

Способен сделать следующие шаги,

  1. Способен к подключиться к удаленному компьютеру RM1.
  2. Может выполнять одну / несколько команд на RM1 (затем https://www.journaldev.com/246/jsch-example-java-ssh-unix-server и { ссылка }).
  3. Возможность подключиться к удаленному компьютеру RM1 и снова подключиться к другому удаленному компьютеру RM2.

Невозможно выполнить этот шаг, 1. Как только я буду подключен к удаленному компьютеру RM2, после этого не сможет выполнить любая команда.

Пожалуйста, дайте мне знать, если кто-нибудь может помочь мне в этом.

Я попробовал этот код:

String host="IP";
String user="username";
String password="password";
String command1="pwd";
String command2="ssh -tt user@ip";
String command3="pwd";

java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");        

Channel channel1=session.openChannel("exec");
((ChannelExec)channel1).setCommand(command1;command2;command3);

channel1.setInputStream(null);
((ChannelExec)channel1).setErrStream(System.err);            
InputStream in1=channel1.getInputStream();
channel1.connect();
byte[] tmp=new byte[1024];
while(true){
  while(in1.available()>0){
    int i=in1.read(tmp, 0, 1024);
    if(i<0)break;
    System.out.print(new String(tmp, 0, i));
  }
  if(channel1.isConnected()){
    System.out.println("exit-status: "+channel1.getExitStatus());
    break;
  }
  try{Thread.sleep(1000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");

1 Ответ

0 голосов
/ 02 марта 2020

Попробуйте выполнить pwd;ssh -tt user@ip;pwd в обычном терминальном клиенте S SH, подключенном к RM1. Он не будет работать, поэтому он не будет работать и в Java.

Чтобы выполнить «прыжок», вы должны использовать переадресацию портов (см. JSch JumpHosts пример ) вместо выполнения ssh на сервере перехода.

...