使用jsch打开SSH隧道时出现无效的私钥

时间:2016-12-07 10:00:06

标签: java ssh public-key-encryption jsch private-key

使用jsch我正在调用addIdentity()添加私钥,getSession()来打开SSH隧道。

在我的Windows机器上本地运行此代码时,隧道的打开正在运行。

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

2016-12-07 01:01:32 ERROR SSHConnector:25 - invalid privatekey: [B@4bb4de6a
com.jcraft.jsch.JSchException: invalid privatekey: [B@4bb4de6a
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:747)
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
    at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
    at com.jcraft.jsch.JSch.addIdentity(JSch.java:408)
    at com.jcraft.jsch.JSch.addIdentity(JSch.java:389)

私钥看起来像这样:

PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: imported-openssh-key
Public-Lines: 6
XXXXXXXXXXXXXXXXXXX
Private-Lines: 14
XXXXXXXXXXXXXXXXXX
Private-MAC: XXXXXXXXXXXXXXXX

这里可能出现什么错误?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我的问题通过使用pem文件而不是ppk解决了。 pem文件为com.jcraft.jsch.JSch jar需要的openssh格式