Sze*_*der 6 java ssh jsch ssh-tunnel pythonanywhere
我尝试根据说明在 Java 程序中使用 SSH 与 PythonAnywhere 中的 MySQL 库建立连接: https:
//help.pythonanywhere.com/pages/AccessingMySQLFromOutsidePythonAnywhere
不幸的是,我每次都会遇到这个错误,而且我已经没有想法了:
com.jcraft.jsch.JSchException:拒绝主机密钥: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) {}
}
Run Code Online (Sandbox Code Playgroud)
我使用 PuTTY 成功连接,但无法让我的程序运行。
JSch 无法验证 SSH 服务器主机密钥。
您的主机密钥存储库包含不同的主机密钥。
或者 JSch 尝试通过调用 来提示用户手动验证主机密钥UserInfo.promptYesNo。当您的实现返回时false,主机密钥将被拒绝。
有关验证主机密钥的正确方法,请参阅:
如何在使用 JSch SFTP 库时解析 Java UnknownHostKey?
请注意,即使在 PuTTY 中,您也必须在第一次连接时验证主机密钥。
好的,
似乎添加:
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
Run Code Online (Sandbox Code Playgroud)
帮助解决了异常。