首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密密钥时如何使用Java与JSch连接到远程SSH计算机

加密密钥时如何使用Java与JSch连接到远程SSH计算机
EN

Stack Overflow用户
提问于 2018-06-07 12:17:02
回答 1查看 1.4K关注 0票数 1

提到所问的问题:Keypair login to EC2 instance with JSch

我正在尝试将JCraft JSch连接到两台不同的EC2机器:

第一台EC2机器,没有加密的.pem文件,它的工作完美!

代码语言:javascript
复制
$ cat ~/Documents/CA01.pem                                                                                       
-----BEGIN RSA PRIVATE KEY-----
…….

然而,在第二台机器上,.pem是加密的,我有一个密码:

代码语言:javascript
复制
$ cat ~/Documents/OPEN_VPN.pem                        
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info:……........

所以代码看起来是:

代码语言:javascript
复制
JSch jsch = new JSch();
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
jsch.addIdentity("/path/to/pem/OPEN_VPN.pem");

session = jsch.getSession("root", getHost(), 22)
session.setConfig(config);
session.setPassword(getPsw());
session.connect(); // here I got Exception....

Channel channel = session.openChannel("sftp");
channel.connect();

我得到了:

代码语言:javascript
复制
Exception in thread "main" com.jcraft.jsch.JSchException: USERAUTH fail
    at com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)
    at com.jcraft.jsch.Session.connect(Session.java:470) ....

请任何帮助。也许还有其他有用的图书馆?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 13:10:26

私钥密码不是会话密码。所以你不能把它传递给Session.setPassword()

使用需要密码的过载JSch.addIdentity()

代码语言:javascript
复制
jsch.addIdentity("/path/to/pem/OPEN_VPN.pem", getPsw());

还请注意,私钥是否加密,与服务器无关。服务器不关心。因此,如果您对第一个服务器的私钥未加密感到满意,那么也没有理由对第二个服务器的私钥进行加密。只需删除加密。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50741019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档