Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Button JSch/SSHJ-单击按钮连接到SSH服务器_Button_Ssh_Click_Jsch - Fatal编程技术网

Button JSch/SSHJ-单击按钮连接到SSH服务器

Button JSch/SSHJ-单击按钮连接到SSH服务器,button,ssh,click,jsch,Button,Ssh,Click,Jsch,我正在尝试通过单击按钮连接到SSH Unix服务器(代码是用actionPerformed()方法编写的)。我正在使用JSch连接到SSH服务器。代码是在SwingWorker类中编写的,因为它是一个网络操作 private void testConnectionButtonActionPerformed(java.awt.event.ActionEvent evt) {

我正在尝试通过单击按钮连接到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();

    }  
但每当我在独立程序中运行相同的代码时,我的意思是,如果我用普通方法编写actionPerformed()方法,并从main()方法调用它,那么我就要编写actionPerformed()方法。它会起作用的。当我将相同的代码与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)

有人能帮我吗?如何前进?

我将您的代码打包到一些GUI代码中(并将其转换为非泛型,以便能够使用与其他JSch示例相同的设置进行编译)。它对我有用。试试这个,并报告您得到的异常(它有更多的异常日志记录)

导入java.awt.event.*;
导入javax.swing.*;
导入java.awt.*;
导入com.jcraft.jsch.*;
类SwingWorkerExample{
JTextField-hostField;
JTextField userNameField;
JTextField密码字段;
JPanel小组;
公共SwingWorkerExample(){
JPanel p=面板=新JPanel(新网格布局(0,2));
hostField=新的JTextField(20);
userNameField=newjtextfield(20);
passwordField=新的JPasswordField(20);
JButton testButton=newjbutton(“connect!”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件ev){
测试连接按钮已执行(ev);
}
});
p、 添加(新JLabel(“主机:”);
p、 添加(主机字段);
p、 添加(新JLabel(“用户:”);
p、 添加(用户名字段);
p、 添加(新JLabel(“密码:”);
p、 添加(密码字段);
p、 添加(测试按钮);
}
公共JPanel getPanel(){
返回面板;
}
私有void testConnectionButtonActionPerformed(ActionEvent evt){
SwingWorker sw=新SwingWorker(){
受保护对象doInBackground()引发异常{
试一试{
JSch JSch=新的JSch();
字符串host=hostField.getText();
字符串username=userNameField.getText();
字符串password=passwordField.getText();
Session Session=jsch.getSession(用户名、主机);
session.setPassword(密码);
session.setConfig(“StrictHostKeyChecking”、“no”);
会话设置超时(20000);
System.out.println(“连接到服务器…”);
session.connect();
返回会议;
}
捕获(例外情况除外){
例如printStackTrace();
掷骰子;
}
}
公众假期结束(){
试一试{
System.out.println(get());
}捕获(例外情况除外){
例如printStackTrace();
}
}
};
sw.execute();
}
公共静态void main(字符串[]egal){
invokeLater(新Runnable(){public void run()){
SwingWorkerExample ex=新的SwingWorkerExample();
JFrame f=新JFrame(“bla”);
f、 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f、 setContentPane(例如getPanel());
f、 包装();
f、 setVisible(真);
}});
}
}

它对我有效(如果我更改服务器名称、密码和设置以接受服务器的公钥,并更正您的
system.out.err
)。Paulo,您能告诉我您希望我设置什么来接受服务器的公钥吗?一段代码将非常有用。谢谢但这不是您的问题,您的程序甚至没有达到这一点(连接被拒绝或不允许)。检查您的防火墙设置。在您要求我放置代码以接受服务器的公钥后,我做了同样的事情,但它没有连接到服务器,防火墙设置很好,因为当我独立运行它时,没有将代码放入actionPerformed()方法中-它会工作,但当我将此代码与actionPerformed()连接时方法-它无法连接。无法找到正确的原因。还有其他建议吗?这也可以在我的github上找到(比如现在的branch swingworker)。Paulo,我已经执行了你的代码,它运行得很好。我使用Netbeans 7创建GUI,有一个类:[org.jdesktop.application.ResourceMap],我使用它从属性文件中获取属性值。我用它来设置按钮文本,标签文本。如果我在代码中不使用该类文件,则session.connect()正在工作。我真的不知道这里的关系为什么无法连接。如果我使用哪怕一行ResourceMap类,它也不会连接。有什么想法吗?不知道,我从没上过这门课。这可能是一个类加载器问题-由于某些依赖关系,如果使用ResourceMap,可能会在类路径中重复某些类,从而导致加载错误的类?我的类路径中不存在此类,我尝试了“javap org.jdesktop.application.ResourceMap”。观察这种行为是很奇怪的,所以现在唯一的办法就是避开这门课?
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)