【问题标题】:Invalid private key when opening SSH tunnel with JSch使用 JSch 打开 SSH 隧道时私钥无效
【发布时间】:2016-12-07 10:00:06
【问题描述】:

使用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

这可能是什么错误?

【问题讨论】:

  • 已经两年了。问:你能“接受”其中一个回复吗?随意编辑回复,或添加您自己的回复。
  • @paulsm4 老实说,我不记得正确答案是什么——如果有的话。

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


【解决方案1】:

我的问题通过使用pem 文件而不是ppk 解决了。

pem 文件是 com.jcraft.jsch.JSch jar 需要的 OpenSSH 格式

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 至少在 0.1.53(我怀疑这会被删除)它确实读取 PPK(除了 OpenSSL PEM = non-newfmt OpenSSH 和其他几个),但 仅适用于 Windows-类型 EOL (CR LF)。 Harold:您是否通过可以更改 EOL 的方法(例如粘贴到编辑器或 FTP TYPE A)将您的 PPK 复制到受影响的系统?
    • jsch 确实支持 PPK 文件,但正如@dave_thompson_085 指出的那样,它们必须将行尾标记为 CRLF。戴夫,请将您的评论转换为答案,以便我将其标记为正确的。
    猜你喜欢
    • 2019-11-20
    • 2013-02-26
    • 2019-04-07
    • 1970-01-01
    • 2017-07-10
    • 2015-05-05
    • 2015-03-09
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多