목표 : 하나의 연결 및 다중 세션 또는 하나의 영구 세션을 가진 원격 제어 ssh 서버.Java 및 SSH : 연결 유지
문제 1 : 현재 SSH를 통해 일부 원격 제어를 수행하기 위해 sshj를 사용하고 있으며 제대로 작동하지만 제대로 작동하지 않는 것으로 보입니다. (호스트가 진정한 루트를 제공하지 못한다. 단지 sudo -i이므로 먼저 로그인해야한다). 문제 2 : 프롬프트를 처리하기 위해 ExpectJ를 다운로드했지만 로그인 한 상태에서 루트로 인증을받은 후 세션을 유지 관리하는 방법을 이해할 수 없습니다.
현재 해킹 솔루션
내가 모든 시간에 다시 로그온해야합니다 :public class Expect {
Spawn shell;
ExpectJ exp;
String host;
int port;
String username;
String passwd;
boolean sudo = false;
public Expect(String host,int port,String username,String passwd) throws IOException, TimeoutException, ExpectJException{
exp = new ExpectJ(5);
this.host = host;
this.port = port;
this.username = username;
this.passwd = passwd;
shell = exp.spawn(host, port, username, passwd);
shell.send("sudo netstat -natvp | grep Xtightvnc\n");
System.out.println(shell.getCurrentStandardOutContents());
try{
shell.expect("[sudo] password for #######:");
shell.send(passwd+"\n");
}
catch (IOException ex){
String err = ex.toString();
if(!err.equals("java.io.IOException: End of stream reached, no match found")){
throw new IOException(ex);
}
}
}
질문 1 : 암호 프롬프트를 "기대"하는 데 사용할 수 sshj 수 있습니까? 나는 그 유형의 제어를 암시하는 문서를 찾을 수 없었다.
인용구 2 : 여러 통화를 할 수있는 영구 연결을 유지하기 위해 위의 Expect 코드를 어떻게 수정할 수 있습니까? 루트로 인증 된 상태에 도달했으나 초기 명령이 보내지면 Spawn이 항상 닫히면 상호 작용을 계속할 수 있기를 원합니다.