我尝试使用以下代码生成SSH密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair=keyPairGenerator.generateKeyPair();
RSAPublicKey publicKey=(RSAPublicKey)keyPair.getPublic();
RSAPrivateKey privateKey=(RSAPrivateKey)keyPair.getPrivate();
String base64PubKey = Base64.encodeBase64String(publicKey.getEncoded());
ByteArrayOutputStream byteOs = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(byteOs);
dos.writeInt("ssh-rsa".getBytes().length);
dos.write("ssh-rsa".getBytes());
dos.writeInt(publicKey.getPublicExponent().toByteArray().length);
dos.write(publicKey.getPublicExponent().toByteArray());
dos.writeInt(publicKey.getModulus().toByteArray().length);
dos.write(publicKey.getModulus().toByteArray());
String publicKeyEncoded = new String(
Base64.encodeBase64(byteOs.toByteArray()));
String key = "ssh-rsa " + publicKeyEncoded + " ";
System.out.println("Public Key ------");
System.out.println(key);
System.out.println("------------------------------");
System.out.println("Private key");
System.out.println(Base64.encodeBase64(privateKey.getEncoded()));
现在,当我将私钥内容存储在文件中并尝试使用putty验证它时,它表示私钥的格式无效。
你们可以帮我解决这个问题吗,有些我错过了私钥格式,因此putty没有认出来。
答案 0 :(得分:1)
Putty无法识别OpenSSH格式的密钥 - 必须首先使用Puttygen将它们转换为Putty样式。
这个转换有一个Debian / Ubuntu包:
apt-get install putty-tools
puttygen openssh_formattted_key -o putty_formatted_key.ppk
您可能能够对此进行调查,并弄清楚如何转换密钥,或者从代码中将该命令作为一个进程运行。
在Windows上,Puttygen GUI可用于此:
https://devops.profitbricks.com/tutorials/use-ssh-keys-with-putty-on-windows/
下载链接:https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe
如果你想直接使用这个密钥生成 ,我建议你使用像MINGW32 / MINGW64,Cygwin等那样的东西,你可以在命令提示符或其他终端中使用ssh命令像窗户。
答案 1 :(得分:1)
如上所述,putty仅使用自己的PPK'格式可以通过 puttygen 进行转换 - 但仅限于'商业' SSH.com格式(此处不适用)以及OpenSSH(6.5之前)使用的格式,即'遗产'格式最初由OpenSSL使用, NOT OpenSSL自2000年以来使用的PKCS8 standard格式并由Java加密使用。
(1)如果您已经或可以获得BouncyCastle,请参阅How can I export a (PKCS#8?) private key in Putty or Puttygen readable format?创建一个可以读入puttygen的文件。
(2)否则,如果您已经或可以获得openssl命令行,请在Java 中使用正确的' 编写PKCS8,其中base64 包含19个组的换行符(类型PRIVATE KEY
(不是RSA PRIVATE KEY
也不是ENCRYPTED PRIVATE KEY
)的76个字符或更少以及标题和预告片,然后通过openssl rsa
运行(不是{{1转换为遗产,并将其读入puttygen。
(3)否则你的选择不太好。可能最好的方法是打开PKCS8格式以获得“遗产”#39;格式如下:
openssl pkey
将该输出放入文件并读入puttygen。