我有一个OpenSSH格式的私钥文件:
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
但是我需要RSA格式:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
在终端上,我会这样做:
ssh-keygen -p -m PEM -f my-openssh-file
但是我需要用Java来做。
我曾尝试使用org.bouncycastle.openssl.PEMWriter,但无法弄清楚如何将输入键(作为输入字符串)转换为可以传递给PEMWriter的PrivateKey对象。
答案 0 :(得分:2)
Maverick Synergy Java SSH API实际上是可行的。
我们的SSH API新分支支持新的OpenSSH私钥文件格式,因此您可以加载新密钥并将其转换为BouncyCastle支持的旧PEM格式。
您将需要以下maven依赖项:
<dependency>
<groupId>com.sshtools</groupId>
<artifactId>maverick-synergy-client</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.sshtools</groupId>
<artifactId>maverick-bc</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
您还需要以下快照存储库,因为当前该API尚未正式发布:
<repository>
<id>oss-snapshots</id>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
首先,您可以使用以下命令加载新的OpenSSH私钥格式:
SshKeyPair key = SshKeyUtils.getPrivateKey(
new File("id_rsa"), "passphrase");
然后,您可以将其传递到较旧的格式实现中,并通过getFormattedKey方法检索文本。
System.out.write(new OpenSSHPrivateKeyFileBC(
key, "passphrase").getFormattedKey());
作为此回答的背景,并宣布我是推荐项目的开发人员,Maverick Synergy是第三代API,它继承自J2SSH Maverick和Maverick Legacy商业API。 Maverick Synergy作为LGPL许可下的开源产品完全可用。