web-dev-qa-db-ja.com

JSchを使用してJavaからSSHサーバーに接続すると、JSchException:reject HostKey "

私の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を使用して正常に接続しましたが、プログラムを機能させることができません。

3
Szejder

JSchはSSHサーバーのホストキーの検証に失敗します。

  • ホストキーリポジトリに別のホストキーが含まれています。

  • または、JSchはユーザーにUserInfo.promptYesNoを呼び出してホストキーを手動で確認するように要求します。また、実装がfalseを返すため、Hostキーは拒否されます。


ホストキーを確認する正しい方法については、以下を参照してください。
解決方法Java UnknownHostKey、JSch SFTPライブラリの使用中?


PuTTYでも、最初の接続でホストキーを確認しておく必要があることに注意してください。

3
Martin Prikryl

OK、

追加するようです:

Java.util.Properties config = new Java.util.Properties(); config.put("StrictHostKeyChecking", "no");
session.setConfig(config);

例外を解決するのに役立ちました。

0
Szejder