目前我正在研究Java程序以监控我们的UNIX脚本。问题是我们下周会得到一台新服务器而且我必须更改我的程序,所以它可以使用JSch连接到新机器。 目前我正在使用这种方式连接旧服务器:
JSch jsch = new JSch();
session = jsch.getSession(user, host);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(60000);
session.connect();
在新服务器上进行测试时,我遇到了问题,它会停在session.connect()
并且不再继续。
经过一些研究后我发现,我正在使用的JSch lib,从服务器上获取新的OpenSSH版本,所以我将我的JSch升级到版本0.1.54,但即使这样也不会解决问题。
实际上我试图使用SSH-Keys,但问题仍然是相同的,没有堆栈跟踪,没有。这是我尝试运行的实际代码:
String private_key = "path_to_file";
jsch.addIdentity(private_key);
session = jsch.getSession(user, host, 22);
session.setTimeout(60000);
session.connect();
键:
SSH-2 RSA
客户端:
JRE 1.8.0_112<br>
JSch 0.1.54
服务器:
OpenSSH 7.2p2<br>
OpenSSL 1.0.2g
在服务器上使用此配置:
OpenSSH 6.6.1p1
OpenSSL 1.0.1f
编辑
添加
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "password");
解决了我的问题
答案 0 :(得分:0)
如果我们通过密码,此代码段对我来说就是
test(){
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
session = jsch.getSession(username, hostip, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
}