私の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を使用して正常に接続しましたが、プログラムを機能させることができません。
JSchはSSHサーバーのホストキーの検証に失敗します。
ホストキーリポジトリに別のホストキーが含まれています。
または、JSchはユーザーにUserInfo.promptYesNo
を呼び出してホストキーを手動で確認するように要求します。また、実装がfalse
を返すため、Hostキーは拒否されます。
ホストキーを確認する正しい方法については、以下を参照してください。
解決方法Java UnknownHostKey、JSch SFTPライブラリの使用中?
PuTTYでも、最初の接続でホストキーを確認しておく必要があることに注意してください。
OK、
追加するようです:
Java.util.Properties config = new Java.util.Properties(); config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
例外を解決するのに役立ちました。