JSCH - 实际服务器中的私钥工作无效

时间:2016-12-15 13:59:54

标签: java sftp jsch

我们正在尝试使用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它可以工作,但我相信文件没有正确转换,好像我使用该文件我得到相同的异常。

这里的任何帮助都会非常有帮助。不确定什么是错的。

1 个答案:

答案 0 :(得分:0)

我最近在也使用JSCH的Jenkins ssh插件中遇到了这个问题。

JSCH仅接受旧的PEM格式私钥。可以生成如下:

ssh-keygen -m PEM -t rsa

-m PEM指示ssh-keygen以PEM格式输出,JCSH可以接受。