密钥加密时如何使用Java和JSch连接到远程SSH机器

密钥加密时如何使用Java和JSch连接到远程SSH机器,java,amazon-ec2,ssh,sftp,jsch,Java,Amazon Ec2,Ssh,Sftp,Jsch,关于提出的问题: 我正在尝试将JCraft JSch连接到两台不同的EC2机器: 第一台在.pem文件上没有加密的EC2机器,它工作完美 $cat~/Documents/CA01.pem -----开始RSA私钥----- ……. 但是在第二台机器上,.pem是加密的,我有一个密码: $cat~/Documents/OPEN_VPN.pem -----开始RSA私钥----- 进程类型:4,加密 DEK信息:……。。。。。。。。 因此,代码如下所示: JSch jsch = new JSc

关于提出的问题:

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

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

$cat~/Documents/CA01.pem
-----开始RSA私钥-----
…….
但是在第二台机器上,.pem是加密的,我有一个密码:

$cat~/Documents/OPEN_VPN.pem
-----开始RSA私钥-----
进程类型:4,加密
DEK信息:……。。。。。。。。
因此,代码如下所示:

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();
我得到:

线程“main”com.jcraft.jsch.JSchException中的异常:USERAUTH失败 在com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)上 在com.jcraft.jsch.Session.connect(Session.java:470)上。。。。
请帮忙。可能还有其他有用的库?

私钥密码短语不是会话密码。因此,您无法将其传递给会话.setPassword()

使用具有密码短语的重载:

jsch.addIdentity("/path/to/pem/OPEN_VPN.pem", getPsw());


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

谢谢,你救了我:)