需要测试主机之间能够免密
配置ssh请自行百度
仅支持老版的密钥格式:旧版本 RSA
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
推荐使用
<dependency>
<groupId>com.github.mwiede</groupId>
<artifactId>jsch</artifactId>
<version>0.2.13</version>
</dependency>
jsch支持, 需要创建ssh-keygen的时候加上参数-m pem
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
-----END RSA PRIVATE KEY-----
-----BEGIN OPENSSH PRIVATE KEY-----
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
-----END OPENSSH PRIVATE KEY-----
com.jcraft.jsch使用时,如果使用的新版本的密钥就会报这个错误
修改密钥格式为RSA
修改新版本
权限问题:需要检查ip,用户名,密码,是否能够远程登录等等
public static final String SECRET_KEY = "~/.ssh/id_rsa";
public static final String SECRET_PUB_KEY = "~/.ssh/id_rsa.pub";
public static final String KNOWN_HOSTS = "~/.ssh/known_hosts";
public static String getTestHost(String user, String host, String password, boolean flag) {
JSch jsch = new JSch();
Session session = null;
try {
if(flag) { // 免密登录
// 1。这样写更全面
jsch.addIdentity(SECRET_KEY);
jsch.setKnownHosts(KNOWN_HOSTS);
jsch.addIdentity(SECRET_KEY, SECRET_PUB_KEY, null);
// 2.只用SECRET_KEY也可以获取session
// jsch.addIdentity(SECRET_KEY);
session = jsch.getSession(user, host, PORT4SSH);
} else {
session = jsch.getSession(user, host, PORT4SSH);
session.setPassword(password);
}
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
} catch (JSchException e) {
return e.getMessage();
} finally {
if (session != null) {
session.disconnect();
}
}
return "yes";
}