Java处理SSH-免密登录
2023-12-14 17:13:37
前提
需要测试主机之间能够免密
配置ssh请自行百度
jar包
旧版:com.jcraft.jsch
仅支持老版的密钥格式:旧版本 RSA
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
新版:com.github.mwiede.jsch
推荐使用
<dependency>
<groupId>com.github.mwiede</groupId>
<artifactId>jsch</artifactId>
<version>0.2.13</version>
</dependency>
id_rsa私钥文件
旧版本
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-----
报错处理:
Invalid privatekey
com.jcraft.jsch使用时,如果使用的新版本的密钥就会报这个错误
解决方法
修改密钥格式为RSA
- 用低版本的的SSH工具生成密钥对,上传上去。低版本生成的就是旧版本的密钥格式RSA
- 生成密钥时指定格式,ssh-keygen -m PEM -t rsa,加上参数-m PEM,生成的密钥对,就是RSA的了。(推荐)
修改新版本
- 使用com.github.mwiede.jsch
Auth fail?
权限问题:需要检查ip,用户名,密码,是否能够远程登录等等
免密登录获取session
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";
}
文章来源:https://blog.csdn.net/Aoutlaw/article/details/134996062
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!