【问题标题】:Converting SSH2 RSA Private Key to .pem using openssl使用 openssl 将 SSH2 RSA 私钥转换为 .pem
【发布时间】:2016-04-07 16:29:01
【问题描述】:

我正在尝试使用Ganymed API 连接到远程服务器。

String SFTPHOST = "10.91.35.169";
String SFTPUSER = "amxadmin";
int SFTPPORT = 60022;
File keyfile = new File("/home/jbadmin/.ssh2/id_rsa_2048_a"); 
String keyfilePass = null; // will be ignored if not needed
Connection conn = new Connection(SFTPHOST);
conn.connect();

conn.authenticateWithPublicKey(SFTPUSER, keyfile, keyfilePass);

当我运行上面的代码时,我得到了下面的异常。

java.io.IOException: Publickey authentication failed.
at ch.ethz.ssh2.auth.AuthenticationManager.authenticatePublicKey(AuthenticationManager.java:331)
at ch.ethz.ssh2.Connection.authenticateWithPublicKey(Connection.java:499)
at ch.ethz.ssh2.Connection.authenticateWithPublicKey(Connection.java:546)

Caused by: java.io.IOException: Invalid PEM structure, '-----BEGIN...' missing
at ch.ethz.ssh2.crypto.PEMDecoder.parsePEM(PEMDecoder.java:141)
at ch.ethz.ssh2.crypto.PEMDecoder.decode(PEMDecoder.java:321)
at ch.ethz.ssh2.auth.AuthenticationManager.authenticatePublicKey(AuthenticationManager.java:240)

仔细阅读api文档后,我知道允许的密钥格式是.pem

当我尝试使用openssl 将基于SSH2 RSA 格式的私钥转换为.pem 格式时,出现以下错误。

[jbadmin@xxxxxxx .ssh2]$ openssl req -x509 -key /home/jbadmin/.ssh2/id_rsa_2048_a -nodes -days 365 -newkey rsa:2048 -out id_rsa_2048_a.pem
unable to load Private Key
139994671441736:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY

我的私钥:

[jbadmin@xxxxxx.ssh2]$ cat id_rsa_2048_a
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Subject: jbadmin
Comment: "2048-bit rsa, jbadmin@x01bicallapp1a, Tue Dec 29 2015 11:38:\
----------------------------
----------------------------
---- END SSH2 ENCRYPTED PRIVATE KEY ----

如果有其他方法可以使用opensslssh-keygen-g3,请建议我

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?
  • 已编辑问题并提供更多详细信息。
  • 我看到 ssh-keygen-g3 是商业 ssh 包的一部分。您的基本问题可能是它以仅 Tectia 支持的格式生成密钥。尝试使用 OpenSSH 附带的ssh-keygen 程序。
  • 特别是如果您有 SSH2 格式的密钥,请使用 ssh-keygen-i(导入)选项,如其手册页所述。
  • 很遗憾,puttygenssh-keygen 选项在我们的服务器上不可用。

标签: unix ssh openssl rsa pem


【解决方案1】:

我刚刚在Unix&Linux 上回答了你的问题。
但是,由于您在这里的问题仍然存在,因此我不会放任不管。

ssh-keygen -p 可以在 SSH2 和 PEM 格式之间进行转换:

 -m key_format
         Specify a key format for key generation, the -i (import),
         -e (export) conversion options, and the -p change
         passphrase operation. The latter may be used to convert
         between OpenSSH private key and PEM private key formats.
         The supported key formats are: “RFC4716” (RFC 4716/SSH2
         public or private key), “PKCS8” (PKCS8 public or private
         key) or “PEM” (PEM public key). By default OpenSSH will
         write newly-generated private keys in its own format, but
         when converting public keys for export the default format
         is “RFC4716”. Setting a format of “PEM” when generating or
         updating a supported private key type will cause the key to
         be stored in the legacy PEM private key format.

从 SSH2 到 PEM:

ssh-keygen -p -f id_rsa -m PEM

从 PEM 到 SSH2:

ssh-keygen -p -f id_rsa -m SSH2

警告:指定的文件被覆盖并就地更新!

注意:虽然ssh-keygen-g3commercial product 相关联,但ssh-keygen 是更常见的开源对应项。您可以在您的系统上免费获得它,它适用于 Linux、Windows、FreeBSD 和 PASE 等。如果您愿意,您可以在具有它的系统上执行转换:SSH2/PEM 密钥毕竟只是纯文本文件,请注意不要遗漏它们。

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多