Jschexception timeout: сокет не установлен
Я пытаюсь использовать JSch для подключения к моему компьютеру через ssh, а затем выполнить команду.
Однако, когда я запускаю код, я никогда не подключаюсь к компьютеру. и следующая ошибка:I/System.out: com.jcraft.jsch.JSchException: timeout: socket is not established
Вот мой соответствующий код:
protected void sshTesting(){
String name = "";
String userName = "kalenpw";
String password = "hunter2";
String ip = "192.168.0.4";
int port = 22;
String command = "cmus-remote -u";
try{
JSch jsch = new JSch();
Session session = jsch.getSession(userName, ip, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing connection");
session.connect(10);
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);
channel.connect(10000);
// name = session.getUserName();
// System.out.println(session.getHost());
}
catch(Exception e){
System.err.print(e);
System.out.print(e);
}
}
Это мой первый раз, когда я использую JSch, поэтому я в значительной степени просто следую одному из их примеров Exec.java . Я нашел этот ответ JSch/SSHJ-подключение к SSH серверу по кнопке click , которая к сожалению мой код выглядит так, как будто он устанавливает соединение подобным образом, но без каких-либо результатов. Я протестировал SSH в свой компьютер нормально, и он работает нормально, поэтому я не думаю, что проблема с сервером, но с моим кодом.
Вот вся трассировка стека:
W/System.err: com.jcraft.jsch.JSchException: timeout: socket is not establishedcom.jcraft.jsch.JSchException: timeout: socket is not established
W/System.err: at com.jcraft.jsch.Util.createSocket(Util.java:394)
W/System.err: at com.jcraft.jsch.Session.connect(Session.java:215)
W/System.err: at com.example.kalenpw.myfirstapp.RectangleClickActivity.sshTesting(RectangleClickActivity.java:97)
W/System.err: at com.example.kalenpw.myfirstapp.RectangleClickActivity$1.onCheckedChanged(RectangleClickActivity.java:56)
W/System.err: at android.widget.CompoundButton.setChecked(CompoundButton.java:165)
W/System.err: at android.widget.Switch.setChecked(Switch.java:1151)
W/System.err: at android.widget.Switch.toggle(Switch.java:1146)
W/System.err: at android.widget.CompoundButton.performClick(CompoundButton.java:123)
W/System.err: at android.view.View$PerformClick.run(View.java:22589)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7325)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
RectangleClickActivity.java
это файл, который я тестирую SSH.
Строка 97 является: session.connect(10);
sshTesting();
1 ответ:
Проблема закончилась тем, что я устанавливал конфигурацию в
session.setConfig("StrictHostKeyChecking", "no");
, но по какой-то причине вам нужно создать конфигурацию и установить StrictHostKeyChecking, а затем добавить эту конфигурацию в сеанс вместо того, чтобы просто установить ее напрямую.Рабочий код выглядит следующим образом:
protected void sshTesting(){ String name = ""; String userName = "kalenpw"; String password = "hunter2"; String ip = "192.168.0.4"; int port = 22; String command = "cmus-remote -u"; try{ JSch jsch = new JSch(); Session session = jsch.getSession(userName, ip, port); session.setPassword(password); //Missing code java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); // System.out.println("Establishing connection"); session.connect(10); Channel channel = session.openChannel("exec"); ((ChannelExec)channel).setCommand(command); channel.setInputStream(null); channel.connect(10000); // name = session.getUserName(); // System.out.println(session.getHost()); } catch(Exception e){ System.err.print(e); System.out.print(e); } }