2016-05-02 55 views
0

我已经尝试了所有创建到我的远程MySQL数据库的SSH连接。如何检查我的主机是否不允许SSH访问

 String user = "user"; 
     String password = "pass"; 
     String remoteHost = "host"; 
     int localPort = 2022; 
     int remotePort = 3306; 
     Session session = null; 

     //Try to forward ports 
     try 
     { 
     //Create the JSCH object 
     JSch jsch = new JSch(); 

     //Get the session 
     session = jsch.getSession(user, remoteHost); 

     //Set the password 
     session.setPassword(password); 

     //To be able to connect to any host (this is just for testing!) 
     session.setConfig("StrictHostKeyChecking", "no"); 

     //Connect the session 
     session.connect(); 

     //Set port forward 
     session.setPortForwardingL(localPort, "127.0.0.1", remotePort); 

     //Show message 
     System.out.println("Waiting for connections…"); 

     //Exit on return 
     InputStreamReader converter = new InputStreamReader(System.in); 
     BufferedReader in = new BufferedReader(converter); 
     in.readLine(); 
     } 

     //Failed 
     catch(Exception ex) 
     { 
     //Message 
     System.out.println("Failed to setup tunnel"); 

     //Stack trace 
     ex.printStackTrace(); 
     } 

     //Clean up 
     finally 
     { 
     try{session.disconnect();} catch(Throwable t) {t.printStackTrace();} 
     } 

然而,我不断收到此错误:com.jcraft.jsch.JSchException:java.net.ConnectException:操作超时

我不明白为什么它给我的错误,因为我相信我正在使用正确的信息。所以我的问题是,如何检查我的主机的远程IP,以及如何确保它们允许SSH访问?

UPDATE:

我能够通过ssh -v用户@主机连接到远程MySQL数据库。但是,在我的代码中,我收到此错误:

com.jcraft.jsch.JSchException:PortForwardingL:本地端口127.0.0.1:2022无法绑定。

我正在使用mac,是mac中的本地端口不同?

+0

或许你也应该指定SSH端口('INT远程端口= 22;');如果这不起作用,您需要询问您的提供商。 –

+0

port'3306'用于mysql。你想用SSH做什么?只有通过SSH的远程SSH或MySQL连接? –

+0

您可以请发布例外的statcktrace?如果您的手动连接正在工作,包括MySQL端口的转发。那么你的代码也应该工作。目前为止没有错。 – SubOptimal

回答

0

这里有几个步骤来隔离问题的根源。因为它可能与您的Java代码无关。

  1. 尝试首先从壳SSH连接,以检查是否SSH是一般
    ssh -v [email protected]
  2. 工作,如果这个已经失败 - >问问主机管理员
  3. 如果成功尝试
    ssh -v [email protected] -L 2022:127.0.0.1:3306
    你应该现在能够通过本地端口连接到MySQL 2022
  4. 如果失败 - >问问主机管理员
  5. 如果这suceeds试图找到这个问题在Java代码

的SSH隧道和MySQL一些有用的链接:MySQL Remote Connectivity: SSH-Tunnel, HTTP-Tunnel

+0

因此,对于-v用户@主机,不需要输入密码?而对于主机,我输入的IP地址做我的IP和端口? – fontquest

+0

@fontquest ** 1)**在这种情况下,您必须手动输入密码。 ** 2)**在您的发布代码中,您也没有指定SSH服务器的端口。所以它会使用标准的。这是'22'。 – SubOptimal

+0

我的意思是通过shell,我需要输入我的密码吗?如何 – fontquest

相关问题