我试图在我的Java程序中使用SSH在PythonAnywhere中建立与PythonAnywhere数据库的连接,按照以下说明:
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连接,但我的程序无法工作。
发布于 2020-01-05 21:07:55
JSch无法验证SSH服务器主机密钥。
、
UserInfo.promptYesNo来提示用户手动验证主机密钥。当您的实现返回false时,主机键将被拒绝。有关验证主机密钥的正确方法,请参见:
How to resolve Java UnknownHostKey, while using JSch SFTP library?
注意,即使在PuTTY中,您也必须在第一个连接上验证了主机键。
发布于 2020-01-05 19:36:44
好的,
似乎补充如下:
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no");
session.setConfig(config);帮助解决了这一例外。
发布于 2021-12-22 23:34:55
FWIW,在我的例子中,使用jsch以编程方式将ssh输入到另一台计算机,即使我使用的是用户名/密码凭据,我也必须有手动ssh用户名/pw登录(类型ecdsa-sha2-nistp 256)添加的密钥,以及在使用基于rsa键的登录(类型ssh-rsa)时添加的密钥。
https://stackoverflow.com/questions/59603213
复制相似问题