원격 시스템에 SSH를 통해 java를 사용하여 일부 명령을 보내려고합니다.sshxcute 세션이 다운되었습니다
나는 원격 시스템에서 SSHD 설정 파일을 조정하여 작업 코드의 다음 코드를 얻기 위해 관리했습니다 :
ConnBean connection = new ConnBean("remote.machine", "user", "password");
SSHExec ssh = SSHExec.getInstance(connection);
ssh.connect();
ExecCommand cmd = new ExecCommand("echo 123");
ssh.exec(cmd);
이 코드는 새로운 자바 프로젝트에 완벽하게 잘 작동합니다. 그러나 내 안드로이드 응용 프로그램 (Java로 작성된)에서 똑같은 코드를 사용하여 똑같은 sshxcute 항아리를 사용하면 JSchException
이 세션이 종료되었음을 알게됩니다. 이는 ssh.connect()
단계가 실패했기 때문입니다.
그래서 새로운 Java 프로젝트에서 이것을 실행하고 Java 기반 Android 응용 프로그램에서 실행하는 것의 차이점은 무엇입니까?
나는과 같이 대신 JSch 연결을 사용하여 시도 :
JSch jsch = new JSch();
Session session = jsch.getSession("user", "remote.machine", 22);
session.setPassword("password");
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
prop.put("Compression", "no");
session.setConfig(prop);
ChannelExec channel = (ChannelExec) session.openChannel("exec");
BufferedReader in=new BufferedReader(new InputStreamReader(channel.getInputStream()));
channel.setCommand("echo 123");
channel.connect();
session.connect();
다시이 과정이 새로운 자바 프로젝트에서 작동하지만 내가 같은 예외가 안드로이드 응용 프로그램에서.
W/System.err: com.jcraft.jsch.JSchException: session is down
W/System.err: at com.jcraft.jsch.Session.openChannel(Session.java:752)
W/System.err: at net.neoremind.sshxcute.core.SSHExec.exec(SSHExec.java:164)
W/System.err: at pi.picontroller.MainControl.launchFifa(MainControl.java:28)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
W/System.err: at android.view.View.performClick(View.java:5610)
W/System.err: at android.view.View$PerformClick.run(View.java:22260)
W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:154)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6077)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
내가 연결을 테스트에 추가하는 방법 :
private static boolean isReachable(String addr, int openPort, int timeOutMillis) {
try {
try (Socket soc = new Socket()) {
soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis);
}
return true;
} catch (IOException ex) {
return false;
}
}
차이점은 네트워크 구성이나 방화벽 또는 사용 권한과 관련이 있습니다. "원인"체인 (있는 경우)을 포함하여 예외에 대한 전체 스택 추적을 보여줍니다. –
그것이 그것이 잘되어야한다고 생각한 것입니다. 스택 트레이스에는 출력이 거의 없습니다. 편집에서 stacktrace를 추가하여 아무 것도 만들 수 있는지 확인했습니다. – Tom