![](/img/trans.png)
[英]“reject HostKey” when connecting to remote host through jumphost with JSch
[英]"JSchException: reject HostKey" when connecting to SSH server from Java using JSch
我嘗試根據說明在我的 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) {}
}
我使用 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);
幫助解決異常。
FWIW,在我的情況下,使用 jsch 以編程方式 ssh 到另一台機器,即使我使用的是用戶名/密碼憑據,我也必須通過手動 ssh 用戶名/密碼登錄(類型 ecdsa-sha2-nistp256)添加兩個密鑰,以及在使用基於 rsa 密鑰的登錄(鍵入 ssh-rsa)時添加的那個。
啟動您的應用程序一次
sftp.strictHostKeyChecking=no
這將在known_hosts中添加密鑰,之后您可以將其切換回yes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.