java如何使用JSch库将PEM文件转换为ssh到ec2的字符串
我正在尝试使用Java代码中的JSch库SSH到EC2。我在SOHow can I use .pem files content as a string in ec2 connection using JSch library中引用了这个链接,并尝试了下面提到的几件事情,但都没有成功。有人能指导我如何实现我的目标吗
目标
我有一个这样的PEM文件。我不想将我的PEM文件存储在AWS中的任何地方,因此我的方法是提取一个等价的字符串,我可以将其编码并存储在数据库中,然后从java对其进行解码,以便将参数传递给采用以下参数的addIdentity
方法:
addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
throws JSchException
-----BEGIN RSA PRIVATE KEY-----
MIIepsdfAIBAAKCAQEAtBk068z
...
xVNdhlDy6asdk9wsdQ==
-----END RSA PRIVATE KEY-----
对于我的目标,我的addIdentity
方法是这样的,我相信:
addIdentity ("username","{privatekey string converted to byte array}",null, null)
我想知道那根弦是怎么形成的?我对密码学非常陌生,但在这个过程中,我了解到,因为我的PEM有^{
其次,我知道主体是用Base64编码的,所以在去掉所有回车、页眉和页脚后,我甚至尝试用Base64解码字符串,这给了我类似的错误
Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
下面是一些我试图跟进但未能解决的附加链接
JSch getting "invalid privatekey:" while trying to load an RSA private key by KeyPairGenerator
Converting a PEM private key file to a JAVA PrivateKey Object
希望有人能指引我正确的方向
谢谢
# 1 楼答案
我找到了答案。 下面的帖子给了我一个方向
JSch: addIdentity from private key stored on hdfs
对于其他希望解决类似需求的人,请确保没有删除页眉、页脚信息。这花了我大部分时间进行调试,因为大多数博客/SO帖子都指向剥离这些角色。在Java中,字符串必须有回车符,否则可能会得到完全不同的字节数组
使用“US-ASCII”字符集将字符串转换为字节数组。如果您没有密码短语,请使用以下JSch方法:
注意:确保传递的是无符号字节数组,如:
阵列(45,45,69,…)
而不是
阵列(45,-35,-125,…)