我们正在尝试使用JSCH从远程服务器下载文件。当我们尝试
时,已经在两台服务器之间建立了SFTP密钥交换SFP username@hostname
它成功连接而不需要任何密码。 但是在java代码中我们尝试使用JSCH连接时获得无效的私钥异常。
ERROR com.crer.log.debug - com.jcraft.jsch.JSchException: invalid privatekey:
我所做的代码如下所示
JSch jsch = new JSch();
String privateKey = location of the private key on client server
jsch.addIdentity(privateKey);
session = jsch.getSession(stpUser, sftpHost, sftpPort);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
修改
使用的JSCH版本是0.1.54
私钥就像
一样开始---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Subject: username
Comment: "2048-bit rsa, username@host, Tue Dec 13 2016 19:25:22 \
-0500"
我甚至尝试将私钥转换为openssh格式,但却出现了异常
ssh-keygen -i -f id_rsa_2048_a > id_rsa_2048_a_openssh
Private key -f is unreadable: Failed to open `-f': No such file or directory / Failed to read file `-f'.
Error: Cannot determine the type of the key.
如果我从命令中删除-f它可以工作,但我相信文件没有正确转换,好像我使用该文件我得到相同的异常。
这里的任何帮助都会非常有帮助。不确定什么是错的。
答案 0 :(得分:0)
我最近在也使用JSCH的Jenkins ssh插件中遇到了这个问题。
JSCH仅接受旧的PEM格式私钥。可以生成如下:
ssh-keygen -m PEM -t rsa
-m PEM
指示ssh-keygen以PEM格式输出,JCSH可以接受。