2013-09-25 86 views
0

我在尝试使用java中的Ganymed库进行连接测试时有点问题,2周前它工作正常,没有问题,但现在我收到以下错误消息:尝试执行命令时抛出的错误

The execute request failed. 

这与Ganymed的“execCommand()”方法有关。当我使用WinSCP进行连接时,一切正常,但尝试使用java连接会给我带来错误。我也在想,如果防火墙也可能是原因,只是一个想法。

我使用以执行tail命令的代码如下:

 import java.io.BufferedReader; 
     import java.io.IOException; 
     import java.io.InputStream; 
     import java.io.InputStreamReader; 
     import java.util.HashMap; 
     import java.util.Map; 
     import ch.ethz.ssh2.Connection; 
     import ch.ethz.ssh2.Session; 
     import ch.ethz.ssh2.StreamGobbler; 


    public class SSHTesting { 


public static void main(String[] args) { 


    try{ Connection conn = new Connection("eappdev101.momentum.co.za"); 

    conn.connect(); 

     boolean isAuthenticated = conn.authenticateWithPassword("username", "password"); 

     if (isAuthenticated == false) { 
      System.out.println("Credentials are wrong."); 
     } 

     Session sess = conn.openSession(); 

     sess.execCommand("tail -f /logs/SystemOut.log"); 
     InputStream stdout = new StreamGobbler(sess.getStdout()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

     sess.close(); 
     conn.close(); 
     System.out.println("Done"); 
} 

catch(Exception ie){ 
    System.out.println(ie.getMessage()); 
} 



} 

    } 

光的任何棚屋在高度赞赏。先谢谢你。

+0

代码看起来很好,所以这可能是因为SSH服务器的身份验证组态。 –

回答

0

对我来说,正常工作与关键,我认为你应该使用键出于安全原因

检查下面的代码

private void init() throws IOException{ 
     char privateKeyChar[] = sshPrivateKey.toCharArray(); 

     conn = new Connection(ftpHostname,22); 
     conn.connect(); 

     boolean isAuthenticated = conn.authenticateWithPublicKey(sshUsername, privateKeyChar, null); 
     if (isAuthenticated == false) 
      throw new IOException("Authentication failed."); 

     session = conn.openSession();  
    } 

    public String excuteCMD(String cmd) throws IOException 
    { 
     session = conn.openSession(); 
     session.execCommand(cmd); 
     InputStream stdout = new StreamGobbler(session.getStdout()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

     while (true) 
     { 

      String line = br.readLine(); 
      if (line == null) 
       break; 
      else 
       output+=line; 
     } 

     return output; 
    } 
+0

嗨萨达姆,感谢您的快速回复,如果我可能会问,sshPrivateKey仍然是我用来登录的密码或者它应该使用Putty生成的密码或?谢谢。 –

+0

您使用ssh-keygen生成它,并将公钥放在authorized_keys下的Linux/Unix机器中,参考下面的示例http://sshmenu.sourceforge.net/articles/key-setup.html –

+0

感谢萨达姆的链接,我会更新你的是我正在进步,目前正在检查你建议的链接。 –

相关问题