无法通过SSH

时间:2018-02-10 11:25:04

标签: mysql ssh putty navicat

我正在尝试连接到由strato托管的MySQL服务器。

我按照this page的指示使用PuTTy连接数据库。 现在连接到我的数据库是没有问题的,如果我使用终端:ass you can see on this screenshot

但是一旦我尝试使用NaviCatMySQL Workbench连接到MySQL服务器,就会出现此错误:screenshot of the errors

我做错了什么?如何使用NaviCat连接到数据库? 我还想通过Java连接到这个数据库,但是我应该用什么线连接,我应该在主机上填写什么?只是localhost?所以我应该使用这样的函数来连接:

public static void connectToSQL() {
    try {
        @SuppressWarnings("unused")
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/DB3262523", "U3262523", "....");
        System.out.println("Connection success");
    } catch (Exception e) {
        //TODO: handle exception
        System.err.println(e);

}
}

2 个答案:

答案 0 :(得分:0)

最后,我明白了,您只想使用SSH隧道连接mysql数据库服务,就不想打开防火墙,只想通过JumpBox访问数据库。 我已经使用JSch库进行SSH调试。

这是您的代码。

vector<int> ivec;

for (vector<int>::value_type i = 0; i != 10; ++i) {
    ivec.push_back(i);
    ivec.push_back(i);  // duplicate copies of each number
}

for (vector<int>::size_type i = 0; i < ivec.size(); ++i) {
    std::cout << ivec[i] << "\n";
}

请确保在您的import java.sql.DriverManager; import java.sql.SQLException; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.sql.Connection; public class MySqlConnOverSSH { public static void main(String[] args) throws SQLException { int local_proxy_port=4567; String database_host="rdbms.strato.de"; String ssh_host="ssh.strato.de"; int database_port=3306; String user="ssh_username"; String privateKey = "In case you want to use private key to do SSH"; String password="sshpassword"; String dbuserName = "yourDBName"; String dbpassword = "YourDBPass"; String url = "jdbc:mysql://localhost:"+local_proxy_port+"/your-database-name"; String driverName="com.mysql.jdbc.Driver"; Connection conn = null; Session session= null; try{ java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); //Only in case you need to access SSH using key. //jsch.addIdentity(privateKey); session=jsch.getSession(user, ssh_host, 22); session.setPassword(password); session.setConfig(config); session.connect(); System.out.println("Connected"); int assinged_port=session.setPortForwardingL(local_proxy_port, database_host, database_port); System.out.println("localhost:"+assinged_port+" -> "+database_host+":"+database_port); System.out.println("Port Forwarded"); Class.forName(driverName).newInstance(); conn = DriverManager.getConnection (url, dbuserName, dbpassword); System.out.println ("Connected!!!"); }catch(Exception e){ e.printStackTrace(); }finally{ if(conn != null && !conn.isClosed()){ System.out.println("Hurry Done!!"); conn.close(); } if(session !=null && session.isConnected()){ System.out.println("Hurry Done!! Closing SSH"); session.disconnect(); } } } } 中包括mysql-connector-java-xxx-bin.jar;。其中xxx是classpath的版本,例如mysql jdbc jar

发布进一步的错误,如果运行不正确,则会在运行此代码后看到。我可以重新回答。

答案 1 :(得分:0)

由于可以使用终端连接到数据库,因此实际上可以检查数据库本身,以从服务器的角度查看为什么连接失败。

尝试此查询:

ViewModel

每个连接错误都在不同的列中解决, 因此这有助于查明拒绝连接的根本原因。

参考手册:

https://dev.mysql.com/doc/refman/5.6/en/host-cache-table.html