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.
3 Réponses :
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.
Ce n'est pas la bonne manière. Vous perdez la protection contre les attaques MITM en définissant StrictHostKeyChecking=no
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.
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