4
votes

"JSchException: rejeter HostKey" lors de la connexion au serveur SSH à partir de Java à l'aide de JSch

J'essaie d'établir une connexion avec la base MySQL dans PythonAnywhere en utilisant SSH dans mon programme Java selon les instructions:
https://help.pythonanywhere.com/pages/AccessingMySQLFromOutsidePythonAnywhere

Malheureusement, j'obtiens cette erreur à chaque fois et je suis à court d'idées:

com.jcraft.jsch.JSchException: rejeter 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) {}
}

Je me suis connecté avec succès à l'aide de PuTTY mais je n'arrive pas à faire fonctionner mon programme.


0 commentaires

3 Réponses :


-1
votes

D'accord,

Il semble que l'ajout:

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

a aidé à résoudre l'exception.


1 commentaires

Ce n'est pas la bonne manière. Vous perdez la protection contre les attaques MITM en définissant StrictHostKeyChecking=no



4
votes

JSch ne parvient pas à vérifier la clé d'hôte du serveur SSH.

  • Soit votre référentiel de clés d'hôte contient une clé d'hôte différente.

  • Ou JSch essaie d'inviter l'utilisateur à vérifier manuellement la clé d'hôte en appelant UserInfo.promptYesNo . Et comme votre implémentation renvoie false , la clé d'hôte est rejetée.


Pour une manière correcte de vérifier la clé d'hôte, consultez:
Comment résoudre Java UnknownHostKey, tout en utilisant la bibliothèque JSch SFTP?


Notez que même dans PuTTY, vous devez avoir vérifié la clé d'hôte lors de la première connexion.


0 commentaires

0
votes

Démarrez votre candidature une fois avec

sftp.strictHostKeyChecking=no

cela ajoutera la clé dans known_hosts, après quoi vous pourrez la remettre à yes


0 commentaires