Java 使用JSch打开SSH隧道时私钥无效

Java 使用JSch打开SSH隧道时私钥无效,java,ssh,public-key-encryption,jsch,private-key,Java,Ssh,Public Key Encryption,Jsch,Private Key,我打电话是为了添加私钥并打开SSH隧道 当在我的Windows计算机上本地运行此代码时,隧道的开口正在工作 但是,在CI上使用相同的私钥运行相同的代码时,会发生以下错误: 2016-12-07 01:01:32错误SSHConnector:25-私钥无效:[B@4bb4de6a com.jcraft.jsch.JSchException:无效的私钥:[B@4bb4de6a 位于com.jcraft.jsch.KeyPair.load(KeyPair.java:747) 位于com.jcraft.

我打电话是为了添加私钥并打开SSH隧道

当在我的Windows计算机上本地运行此代码时,隧道的开口正在工作

但是,在CI上使用相同的私钥运行相同的代码时,会发生以下错误:

2016-12-07 01:01:32错误SSHConnector:25-私钥无效:[B@4bb4de6a
com.jcraft.jsch.JSchException:无效的私钥:[B@4bb4de6a
位于com.jcraft.jsch.KeyPair.load(KeyPair.java:747)
位于com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
位于com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
位于com.jcraft.jsch.jsch.addIdentity(jsch.java:408)
位于com.jcraft.jsch.jsch.addIdentity(jsch.java:389)
私钥如下所示:

PuTTY-User-Key-File-2:ssh-rsa
加密:无
注释:导入的openssh密钥
公共线路:6条
XXXXXXXXXXXXXXXXX
专线:14
XXXXXXXXXXXXXXXX
专用MAC:XXXXXXXXXXXXXX

这里可能有什么错误?

我有根据地猜测,jSCh不支持PuTTY密钥格式,而是支持标准PEM或OpenSSH格式。您可以在PuTTYgen中将PPK转换为PEM,它应该可以解决您的问题。

我的问题是通过使用
PEM
文件而不是
PPK
解决的


pem
文件是com.jcraft.jsch.jsch jar至少在0.1.53中需要的OpenSSH格式(我怀疑这会被删除),它确实读取PPK(除了OpenSSL PEMs=non-newfmt-OpenSSH和其他几个文件),但仅使用Windows类型EOL(CR LF).Harold:您是否使用可以更改EOL(例如粘贴到编辑器或FTP类型a)的方法将您的PPK复制到受影响的系统?jsch确实支持PPK文件,但正如@dave_thompson_085所指出的,它们必须用CRLF标记行尾。dave,请将您的注释转换为答案,以便我可以将其标记为正确的。这是两年。问:你能“接受”其中一个回答吗?请随意编辑一个回答,或者添加你自己的回答。@paulsm4老实说,我记不起正确的答案是什么了——如果有答案的话。