2014-12-02 2 views
1

Я понимаю, что дубликат >>> скопирован из дубликата >>> Пока на вашем локальном компьютере работает сервер SSH < < < < <, но я не могу комментировать и не может, как от вопроса (и им не предоставляют ответ ....)com.jcraft.jsch.JSchException: java.net.ConnectException: Connection отказано: connect

Он заявил, что «пока ваша локальная машина имеет сервер SSH работает», но я не знаю, как запустить SSH-сервер. Я включаю мою шпатлевку (дважды щелкните по ней) (не уверен, что это означает, что SSH (? Putty?) Сервер (?) Запущен ... сомнение ...

im действительно новое для программирования сокетов. I я использую JSch (http://www.jcraft.com/jsch/), чтобы попытаться подключиться к удаленному серверу (более поздний этап) . В настоящее время это код, который я использую, и я пытаюсь подключиться к локальному компьютеру и выполнить команду (ls to exact), чтобы сделать тест, но я продолжаю сталкиваться с отказом в подключении, и я заметил, что есть некоторые статьи, в которых упоминается о «прослушивании сервера», но я понятия не имею, что это означает. Пожалуйста, просмотрите мой код, как показано ниже.

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 использует commandprompt для ping 127.0.0.1 в порядке, но если я использую telnet 127.0.0.1, он говорит: Не удалось открыть соединение с хостом (я включил putty (? двойной щелчок?), на порт 23: соединение не удалось. и, SSH = PUTTY ... правый? (Я не могу использовать команду 'SSH' в командной строке)

Ссылки: 1) http://sourceforge.net/p/jsch/mailman/message/31745775/

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

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

и ... спасибо заранее!

oh, а theres также http://www.ganymed.ethz.ch/ssh2/ (альтернатива JSch .. любой совет приветствуется!), Но когда я пытаюсь запустить пример, он не говорит о главном. который .. i duno>. < Будут палки w JSch до этого ....

BTW, я пробовал https://serverfault.com/questions/185153/free-public-ssh-server-for-testing-purposes для сервера, но ... я понятия не имею, какой адрес, имя пользователя и пароль. (Я также http://sdf.org счетов вновь созданных но когда я пытаюсь подключиться к нему, он говорит unknownhost. FYI!)

забыл упомянуть, им с помощью окна 7 и «ни» это не команда в моей команде prompt ...

+0

Вам необходимо установить SSH-сервер. Шпатлевка действует только как ваш клиент SSH. –

ответ

5

Вы пытаетесь подключиться к локальному хосту через протокол SSH. С JSCH это не совсем программирование сокетов, но ваша проблема связана с программированием сокетов.

По существу, ваша проблема заключается в том, что ваша программа пытается подключиться к порту, который не открыт, особенно в этом случае это порт 22. У вас нет SSH-сервера, поэтому ваш клиент SSH ничего не может сделать. Вы делаете телефонный звонок тому, у кого нет телефона.

Для решения этой проблемы вам необходимо либо найти тестовый сервер, на котором работает ssh, чтобы выполнить вашу разработку, либо установить ssh-сервер на локальный компьютер. Для окна окна ваш лучший выбор - cygwin, который позволит вам эмулировать систему posix и запустить SSHD на вашей локальной машине.Поиск Google для cygwin и sshd предоставит вам примеры того, как это установить.

+0

Привет, я в настоящее время пытаюсь использовать freesshd через http://www.techmalaya.com/2009/08/05/setup-ssh-server-for-windows-freesshd/ и http://osskb.blogspot.sg/2013/ 10/how-to-resolve-you-dont-have.html для прав прав администратора. большое спасибо! и я могу PUTTY для моего localhost 127.0.0.1, но когда я пытаюсь войти (через графический интерфейс приложения, он говорит ee: com.jcraft.jrexec.JRexecException: JRexec: java.net.ConnectException: Connection отказано: connect (я создал счет через freesshd user1 pwd user1 и проверил весь доступ) – Kelly

0

Я понятия не имею, почему, но после того, как я могу замаскировать свой собственный локальный хост, хотя выше (пример кода и спасибо за предоставление кода), я сталкиваюсь с ошибкой, но следующим кодом (Еще раз спасибо за предоставление Код Этот код от JCraft, если я не смущен, работает! Мне удалось отправить команду «help»). Большое спасибо #chris midolo за предоставление ответа и #Robby Cornelissen за комментарий ... хотя я становлюсь более запутанным (Итак ... SSH означает сервер и клиент (?) Sigh ... и я, хотя средства удаленного доступа до тех пор, пока мой компьютер включен, я могу получить доступ к нему из другого места, где ... Так что мой компьютер, для которого можно получить доступ из другого места, также должен иметь какой-то сервер, работающий ... OMG! моя голова болит ....)

Обратите внимание, что кроме «справки» с использованием другой команды будет выведено сообщение «Невозможно выполнить команду или оболочку в удаленной системе: не удалось выполнить процесс. Согласно http://www.freesshd.com/index.php?ctt=forum&action=view&topic=1186152755, вам нужно использовать cmd /c dir и выполнить свой файл битой, мне нужно использовать C: \ Users \ kellyseo \ sampling.bat (Если я просто использует sampling.bat, он показывает ошибку)

Мой Batch содержимое файла выглядит следующим образом:

ECHO RUNNING kellyseo SAMPLING.BAT 
@ECHO OFF 
CD C:\Users\kellyseo\Desktop 
set ldt=kellyseo folder version executed on %date% %time% 
echo %ldt%>> logs.txt 
EXIT 

Я на самом деле есть 2 версии одного и того же файла (один я положил на рабочем столе), то я могу использовать только «» sampling.bat

Если вы не делаете как и во многих приглашениях, кроме удаления подсказок, вам также могут потребоваться мычание коды, если вы сталкиваетесь с этой com.jcraft.jsch.JSchException: UnknownHostKey (Спасибо com.jcraft.jsch.JSchException: UnknownHostKey)

session.setPassword(password); 
java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no"); 
session.setConfig(config); 
session.connect(); 

** Примечание: # 1 подсказка = введите пароль. # 2 prompt = введите команду. имя пользователя является «user1»

/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ 
/** 
* This program will demonstrate remote exec. 
* $ CLASSPATH=.:../build javac Exec.java 
* $ CLASSPATH=.:../build java Exec 
* You will be asked username, hostname, displayname, passwd and command. 
* If everything works fine, given command will be invoked 
* on the remote side and outputs will be printed out. 
* 
*/ 
import com.jcraft.jsch.*; 
import java.awt.*; 
import javax.swing.*; 
import java.io.*; 

public class Exec{ 
    public static void main(String[] arg){ 
    try{ 
     JSch jsch=new JSch(); 
/* 
     String host=null; 
     if(arg.length>0){ 
     host=arg[0]; 
     } 
     else{ 
     host=JOptionPane.showInputDialog("Enter [email protected]", 
             System.getProperty("user.name")+ 
             "@localhost"); 
     } 
     String user=host.substring(0, host.indexOf('@')); 
     host=host.substring(host.indexOf('@')+1); 
*/ 
     String user1 = "user1"; 
     String host1 = "127.0.0.1"; 
     Session session=jsch.getSession(user1, host1, 22); 

     /* 
     String xhost="127.0.0.1"; 
     int xport=0; 
     String display=JOptionPane.showInputDialog("Enter display name", 
               xhost+":"+xport); 
     xhost=display.substring(0, display.indexOf(':')); 
     xport=Integer.parseInt(display.substring(display.indexOf(':')+1)); 
     session.setX11Host(xhost); 
     session.setX11Port(xport+6000); 
     */ 

     // username and password will be given via UserInfo interface. 
     UserInfo ui=new MyUserInfo(); 
     session.setUserInfo(ui); 
     session.connect(); 

     String command=JOptionPane.showInputDialog("Enter command", 
               "set|grep SSH"); 

     Channel channel=session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command); 

     // X Forwarding 
     // channel.setXForwarding(true); 

     //channel.setInputStream(System.in); 
     channel.setInputStream(null); 

     //channel.setOutputStream(System.out); 

     //FileOutputStream fos=new FileOutputStream("/tmp/stderr"); 
     //((ChannelExec)channel).setErrStream(fos); 
     ((ChannelExec)channel).setErrStream(System.err); 

     InputStream in=channel.getInputStream(); 

     channel.connect(); 

     byte[] tmp=new byte[1024]; 
     while(true){ 
     while(in.available()>0){ 
      int i=in.read(tmp, 0, 1024); 
      if(i<0)break; 
      System.out.print(new String(tmp, 0, i)); 
     } 
     if(channel.isClosed()){ 
      if(in.available()>0) continue; 
      System.out.println("exit-status: "+channel.getExitStatus()); 
      break; 
     } 
     try{Thread.sleep(1000);}catch(Exception ee){} 
     } 
     channel.disconnect(); 
     session.disconnect(); 
    } 
    catch(Exception e){ 
     System.out.println(e); 
    } 
    } 

    public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{ 
    public String getPassword(){ return passwd; } 
    public boolean promptYesNo(String str){ 
     Object[] options={ "yes", "no" }; 
     int foo=JOptionPane.showOptionDialog(null, 
      str, 
      "Warning", 
      JOptionPane.DEFAULT_OPTION, 
      JOptionPane.WARNING_MESSAGE, 
      null, options, options[0]); 
     return foo==0; 
    } 

    String passwd; 
    JTextField passwordField=(JTextField)new JPasswordField(20); 

    public String getPassphrase(){ return null; } 
    public boolean promptPassphrase(String message){ return true; } 
    public boolean promptPassword(String message){ 
     Object[] ob={passwordField}; 
     int result= 
     JOptionPane.showConfirmDialog(null, ob, message, 
             JOptionPane.OK_CANCEL_OPTION); 
     if(result==JOptionPane.OK_OPTION){ 
     passwd=passwordField.getText(); 
     return true; 
     } 
     else{ 
     return false; 
     } 
    } 
    public void showMessage(String message){ 
     JOptionPane.showMessageDialog(null, message); 
    } 
    final GridBagConstraints gbc = 
     new GridBagConstraints(0,0,1,1,1,1, 
          GridBagConstraints.NORTHWEST, 
          GridBagConstraints.NONE, 
          new Insets(0,0,0,0),0,0); 
    private Container panel; 
    public String[] promptKeyboardInteractive(String destination, 
               String name, 
               String instruction, 
               String[] prompt, 
               boolean[] echo){ 
     panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 

     gbc.weightx = 1.0; 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     gbc.gridx = 0; 
     panel.add(new JLabel(instruction), gbc); 
     gbc.gridy++; 

     gbc.gridwidth = GridBagConstraints.RELATIVE; 

     JTextField[] texts=new JTextField[prompt.length]; 
     for(int i=0; i<prompt.length; i++){ 
     gbc.fill = GridBagConstraints.NONE; 
     gbc.gridx = 0; 
     gbc.weightx = 1; 
     panel.add(new JLabel(prompt[i]),gbc); 

     gbc.gridx = 1; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.weighty = 1; 
     if(echo[i]){ 
      texts[i]=new JTextField(20); 
     } 
     else{ 
      texts[i]=new JPasswordField(20); 
     } 
     panel.add(texts[i], gbc); 
     gbc.gridy++; 
     } 

     if(JOptionPane.showConfirmDialog(null, panel, 
             destination+": "+name, 
             JOptionPane.OK_CANCEL_OPTION, 
             JOptionPane.QUESTION_MESSAGE) 
     ==JOptionPane.OK_OPTION){ 
     String[] response=new String[prompt.length]; 
     for(int i=0; i<prompt.length; i++){ 
      response[i]=texts[i].getText(); 
     } 
    return response; 
     } 
     else{ 
     return null; // cancel 
     } 
    } 
    } 
} 
0

Если вы используете макинтош есть вероятность того, что вы не позволили удаленным логины к серверу (в этом случае ваша машина). Перейдите в раздел «Настройки системы» -> «Совместное использование» и включите удаленный вход в систему. Также добавьте пользователя, с которым вы хотите работать.

Смежные вопросы