【发布时间】:2011-07-25 16:21:19
【问题描述】:
我正在尝试通过单击按钮连接到 SSH Unix 服务器(使用 actionPerformed() 方法编写的代码)。我正在使用 JSch 连接到 SSH 服务器。代码写在 SwingWorker 类中,因为它是一个网络操作。
private void testConnectionButtonActionPerformed(java.awt.event.ActionEvent evt) {
SwingWorker<Boolean, Void> sw = new SwingWorker<Boolean, Void>(){
@Override
protected Boolean doInBackground() throws Exception {
JSch jsch = new JSch();
String host = "ServerHost";
String username = "username";
String password = "password";
Session session = jsch.getSession(username, host);
session.setPassword(password);
session.setTimeout(20000);
System.out.println("Connecting to server...");
session.connect();
return true;
}
@Override
public void done(){
try {
System.out.println(get().toString());
} catch (Exception ex) {
System.out.err(ex);
}
}
};
sw.execute();
}
但是在使用正确的主机、用户名和密码详细信息运行后,我一直收到以下错误:
com.jcraft.jsch.JSchException: timeout: socket is not established
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at javax.swing.SwingWorker.get(SwingWorker.java:583)
但是每当我在独立程序中运行相同的代码时,我的意思是改为编写 actionPerformed() 方法,如果我用普通方法编写它并从 main() 方法调用。它会起作用的。当我将相同的代码与 Button Click 的 actionPerformed() 方法集成时,它会给我上述异常。
谁能建议我在这里做错了什么或者应该对代码进行任何修改。
我尝试使用“SSHJ”实现连接到 SSH 服务器,但出现以下错误:
java.net.SocketException: Connection reset
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at javax.swing.SwingWorker.get(SwingWorker.java:583)
有人可以帮助我 - 如何前进?
【问题讨论】:
-
它适用于我(如果我更改服务器名称、密码和设置以接受服务器的公钥,并更正您的
system.out.err)。 -
Paulo,你能告诉我你想让我接受服务器公钥的设置是什么,一段代码真的很有帮助。谢谢。
-
JSch.setConfig("StrictHostKeyChecking", "no")。但这不是你的问题,你的程序甚至没有达到这一点(连接被拒绝或不允许)。检查您的防火墙设置。 -
在您要求我输入代码以接受服务器的公钥后,我做了同样的事情,但它没有连接到服务器,防火墙设置很好,因为当我独立运行它时没有放置actionPerformed() 方法中的代码 - 它可以工作,但是当我将此代码与 actionPerformed() 方法连接时 - 它不会连接。无法找出正确的原因。还有什么建议吗?