Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

com.jcraft.jsch.JSchException: java.net.ConnectException: Connection refused: connect

Tags:

sockets

jsch

I understand that there is duplicate >>> copied from the duplicate >>>As long as your local machine has an SSH server running <<<<< but i cannot comment and cannot as from the question (and im not providing an answer....)

It stated that "As long as your local machine has an SSH server running" but I do not know how to have a SSh server running. I turn on my putty (double click on it) (not sure if this means the SSH(?Putty?) server (?) is running... doubt so...

im really new to socket programming. i am making use of JSch (http://www.jcraft.com/jsch/) to try to connect to a remote server (later stage) currently, this is the code i use and im trying to connect to my local computer and execute a command (ls to be exact) to do a test. However, i keep hitting the connection refused. I googled and i noticed that there are some articles that mentions on "having a server listening" but I have no idea what it means. Please view my code as below.

import java.awt.event.*;

import javax.swing.*;

import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

import com.jcraft.jsch.*;



class SwingWorkerExample {

    JTextField hostField;
    JTextField userNameField;
    JTextField passwordField;
    JPanel panel;


    public SwingWorkerExample() {
        JPanel p = panel = new JPanel(new GridLayout(0,2));
        hostField = new JTextField(20);
        userNameField = new JTextField(20);
        passwordField = new JPasswordField(20);
        JButton testButton = new JButton("connect!");
        testButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ev) {
                    testConnectionButtonActionPerformed(ev);
                }
            });
        p.add(new JLabel("host:"));
        //127.0.0.1
        p.add(hostField);
        p.add(new JLabel("user:"));
        //mycomputerusername
        p.add(userNameField);
        p.add(new JLabel("password:"));
        //mycomputerpassword
        p.add(passwordField);
        p.add(testButton);
    }

    public JPanel getPanel() {
        return panel;
    }

    private void testConnectionButtonActionPerformed(ActionEvent evt) {

        SwingWorker sw = new SwingWorker(){

                protected Object doInBackground() throws Exception {
                    try {
                        JSch jsch = new JSch();

                        String host = hostField.getText();
                        String username = userNameField.getText();
                        String password = passwordField.getText();

                        Session session = jsch.getSession(username, host);
                        session.setPassword(password);
                        session.setConfig("StrictHostKeyChecking", "no");

                        session.setTimeout(20000);
                        System.out.println("Connecting to server...");
                        session.connect();

                        return session;
                    }
                    catch(Exception ex) {
                        ex.printStackTrace();
                        throw ex;
                    }
                }

                public void done(){
                    try {
                        System.out.println(get());
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            };

        sw.execute();

    }


    public static void main(String[] egal) {
        EventQueue.invokeLater(new Runnable(){public void run() {
            SwingWorkerExample ex = new SwingWorkerExample();
            JFrame f = new JFrame("bla");
            f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            f.setContentPane(ex.getPanel());
            f.pack();
            f.setVisible(true);
        }});
    }

    public void remoteLs() throws JSchException, IOException {
        JSch js = new JSch();
        Session s = js.getSession("kellyseo", "192.168.0.103", 22);
        s.setPassword("S9031808z");
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        s.setConfig(config);
        s.connect();

        Channel c = s.openChannel("exec");
        ChannelExec ce = (ChannelExec) c;

        ce.setCommand("ls -l");
        ce.setErrStream(System.err);

        ce.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
          System.out.println(line);
        }

        ce.disconnect();
        s.disconnect();

        System.out.println("Exit code: " + ce.getExitStatus());

      }



      public void remoteMkdir() throws JSchException, IOException {
        JSch js = new JSch();
        Session s = js.getSession("myusername", "myremotemachine.mycompany.com", 22);
        s.setPassword("mypassword");
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        s.setConfig(config);
        s.connect();

        Channel c = s.openChannel("exec");
        ChannelExec ce = (ChannelExec) c;

        ce.setCommand("mkdir remotetestdir");
        ce.setErrStream(System.err);

        ce.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
          System.out.println(line);
        }

        ce.disconnect();
        s.disconnect();

        System.out.println("Exit code: " + ce.getExitStatus());

      }

      public void remoteCopy() throws JSchException, IOException, SftpException {
        JSch js = new JSch();
        Session s = js.getSession("myusername", "myremotemachine.mycompany.com", 22);
        s.setPassword("mypassword");
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        s.setConfig(config);
        s.connect();

        Channel c = s.openChannel("sftp");
        ChannelSftp ce = (ChannelSftp) c;

        ce.connect();

        ce.put("/home/myuser/test.txt","test.txt");

        ce.disconnect();
        s.disconnect();    
      }
}

BTW i uses commandprompt to ping 127.0.0.1 is okay but if i use telnet 127.0.0.1 it says Could not open connection to the host (I turned on putty(?double click?) , on port 23: Connect failed. and, SSH = PUTTY ... right? (i cannot use the 'ssh' command in command prompt)

Links: 1) http://sourceforge.net/p/jsch/mailman/message/31745775/

and 2) http://javarevisited.blogspot.sg/2013/02/java-net-ConnectException-Connection-refused.html

and 3) http://www.jcraft.com/jsch/examples/ and 4) Run a command over SSH with JSch and 5) Can we use JSch for SSH key-based communication?

and... thanks is advance!!

oh, and theres also http://www.ganymed.ethz.ch/ssh2/ (an alternative to JSch.. any advise welcomed!) but when i try to run the example, it says no main. which.. i duno >.< Will stick w JSch till then....

BTW, i try https://serverfault.com/questions/185153/free-public-ssh-server-for-testing-purposes for server but... i have no idea whats the address, username and password. (i also have a http://sdf.org account newly created but when i try to connect to it, it says unknownhost. fyi!)

forgot to mention, im using windows 7 and 'yum' is not a command in my command prompt...

like image 768
2 revs Avatar asked Dec 02 '14 04:12

2 revs


1 Answers

You're attempting to connect to your local host via the SSH protocol. With JSCH this isn't exactly socket programming, but your issue is related to socket programming.

Essentially your issue is that your program is trying to connect to a port which isn't open, specifically in this instance it's port 22. You don't have an SSH server so your SSH client can't do anything. You're making a telephone call to someone who doesn't have a phone.

To resolve this issue you need to either find a test server which does have ssh running on it to do your development against or install an ssh server on your local PC. For a windows box your best bet is cygwin, which will allow you to emulate a posix system and run SSHD on your local machine. A google search for cygwin and sshd will provide you with examples of how to set this up.

like image 85
Chris Midolo Avatar answered Nov 05 '22 06:11

Chris Midolo