java - 如何检查我的主机是否不允许 SSH 访问

标签 java mysql ssh

我已尝试一切方法来创建到远程 MySQL 数据库的 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 访问?

更新:

我可以通过 ssh -v user@host 连接到远程 MySQL 数据库。但是,在我的代码中我收到此错误:

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

我使用的是Mac,Mac中的本地端口是否不同?

最佳答案

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

  1. 首先尝试从 shell 进行 SSH 连接,以检查 SSH 是否正常工作
    ssh -v user@host
  2. 如果这已经失败 -> 询问主机管理员
  3. 如果成功,请尝试
    ssh -v user@host -L 2022:127.0.0.1:3306
    您现在应该可以通过本地端口连接到 MySql 2022
  4. 如果失败 -> 询问主机管理员
  5. 如果成功,请尝试在 Java 代码中查找问题

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

关于java - 如何检查我的主机是否不允许 SSH 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974361/

相关文章:

java - 以编程方式创建 logback 记录器

Java注解在方法前后执行一些代码

java - 声明/初始化和内存分配

php - 3 表连接并在其中添加

linux - ssh 命令输出以保存在 shell 脚本中的文本文件中

ssh - 使用 Ansible 锁定 SSH 的最佳实践是什么?

java - 带有 org.w3c.dom API 的外部和内部 HTML

mysql 3表组合成1行2个值

php - Json 响应未显示文本框中的值

amazon-web-services - 通过 Ubuntu 堡垒到私有(private)子网中的 EC2 实例的 SSH 隧道