我尝试根据指示在我的Java程序中使用SSH在PythonAnywhere中与MySQL数据库建立连接:https://help.pythonanywhere.com/pages/AccessingMySQLFromOutsidePythonAnywhere
不幸的是,我每次都会收到此错误,而我的想法已用尽:
com.jcraft.jsch.JSchException:拒绝HostKey:ssh.pythonanywhere.com
public static void main(String[] args) {
Tunnel tunnel = new Tunnel();
try {
tunnel.go();
} catch (Exception e) {
e.printStackTrace();
}
}
public void go() throws Exception {
String host = "ssh.pythonanywhere.com";
String user = "username";
String password = "password";
int port = 22;
int tunnelLocalPort = 9080;
String tunnelRemoteHost = "username.mysql.pythonanywhere-services.com";
int tunnelRemotePort = 3306;
JSch jsch= new JSch();
Session session = jsch.getSession(user,host,port);
localUserInfo lui = new localUserInfo();
session.setPassword(password);
session.setUserInfo(lui);
session.connect();
session.setPortForwardingL(tunnelLocalPort,tunnelRemoteHost,tunnelRemotePort);
System.out.println("Connecting");
}
class localUserInfo implements UserInfo {
String passwd;
@Override
public String getPassphrase() {return null; }
@Override
public String getPassword() { return null; }
@Override
public boolean promptPassword(String s) { return false; }
@Override
public boolean promptPassphrase(String s) { return false; }
@Override
public boolean promptYesNo(String s) { return false; }
@Override
public void showMessage(String s) {}
}
我已使用PuTTY成功连接,但无法使我的程序正常工作。
确定,
似乎添加:
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
帮助解决异常。
JSch无法验证SSH服务器主机密钥。
您的主机密钥存储库中都包含其他主机密钥。
或者JSch尝试通过调用UserInfo.promptYesNo
提示用户手动验证主机密钥。当您的实现返回false
时,主机密钥将被拒绝。
有关验证主机密钥的正确方法,请参阅:How to resolve Java UnknownHostKey, while using JSch SFTP library?
注意,即使在PuTTY中,您也必须在第一个连接上验证主机密钥。