当前位置: 首页 > 知识库问答 >
问题:

如何使用JSch库将PEM文件转换为ssh到ec2的字符串

王景山
2023-03-14

我正在尝试使用Java代码中的JSch库SSH到EC2。我在中引用了此链接,因此如何使用。pem使用JSch库在ec2连接中将内容作为字符串进行归档,并尝试了下面提到的两种方法,但都没有成功。有人能指导我如何实现我的目标吗?

客观的

我有一个这样的PEM文件。我不想把我的PEM文件存储在AWS的任何地方,因此我的方法是提取一个等效的字符串,我可以编码和存储在数据库中,并从java解码,用于将参数传递给addId相方法,该方法需要这些参数:

addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
    throws JSchException
-----BEGIN RSA PRIVATE KEY-----
MIIepsdfAIBAAKCAQEAtBk068z
...
xVNdhlDy6asdk9wsdQ==
-----END RSA PRIVATE KEY-----

就我的目标而言,我的附加性方法是这样的,我相信:

addIdentity ("username","{privatekey string converted to byte array}",null, null)

我想知道那根弦是怎么形成的?我对密码学非常陌生,但在此过程中,我了解到,由于我的PEM具有BEGIN RSA私钥,因此它是PKCS1格式。JSch支持PKCS1格式还是需要转换为PKSC8?

其次,我了解到主体是用Base64编码的,所以在去掉所有回车、页眉和页脚后,我甚至尝试用Base64解码字符串,这给了我类似这样的错误

线程“main”java中出现异常。安全spec.InvalidKeySpecException:java。安全InvalidKeyException:IOException:algid分析错误,不是序列

以下是我尝试跟进但未能解决的一些附加链接。

>

  • JSch在尝试通过KeyPairGenerator加载RSA私钥时获取无效的私钥:

    Java-如何解码Base64编码的证书

    将PEM私钥文件转换为JAVA私有密钥对象

    希望有人能指引我正确的方向。

    谢谢


  • 共有1个答案

    李昌勋
    2023-03-14

    我想出了答案。下面的帖子给了我一个方向。

    JSch:从存储在hdfs上的私钥中获得addId

    对于希望解决类似需求的任何其他人,请确保您没有剥离页眉、页脚信息。这花费了我大部分时间进行调试,因为大多数博客/SO帖子都指向剥离这些角色。在Java中,字符串必须有回车符,否则可能会得到完全不同的字节数组。

    String  x = "-----BEGIN RSA PRIVATE KEY-----\r\n" + 
                "MIIEpAIBAAKCAQEAtBk\Q/z4QAgk+LN3IUajqjUv7IucsCd4SebbQvah5t4WJ\r\n"
    

    使用“US-ASCII”字符集将字符串转换为字节数组。如果您没有密码短语,请使用以下JSch方法:

    jsch.addIdentity("username",{bytearray of x},null, null)
    

    注意:确保传递的是无符号字节数组,如:
    数组(45,45,69,…)
    和非
    数组(45,-35,-125,…)

     类似资料:
    • 这是使用. pem文件获取与Amazon实例的连接的代码。 我想把私钥放进去。pem文件(< code > jsch . addidentity(private key);)作为来自数据库的字符串。现在它是一个文件名。这是可能的,任何帮助将是可观的。我从点击这里的链接中获得了这段代码

    • 问题内容: 如何使用PEM格式的字符串创建实例?PEM格式的字符串是HTTP请求“ SSL_CLIENT_CERT”标头值。 答案 : 根据mgaert的回答,这是我在Scala中写的内容 : 问题答案: 将Base64解码为二进制,并用一些InputStream读取它,然后尝试

    • 问题内容: 请建议如何将使用库转换为使用库。 我未成功执行的操作: 问题答案: 您无需使用。您应该使用Gson在JSON字符串和您自己的Java对象之间进行转换。 请参阅《Gson用户指南》: (序列化) (反序列化)

    • 这个问题更通用,而不是针对特定的语言,所以我将解释我的问题以及我在伪代码中尝试的内容。 我正在尝试从JWK集生成PEM公钥。JWK包括“e”(指数)和“n”(模量)变量。我的问题是,在不使用任何库和OpenSSL命令行工具的情况下,将此JWK转换为PEM的确切步骤是什么。 以下是供参考的 JWK: 我的大部分研究来源于节点jwk到pem库(可以在这里找到:https://github.com/Br

    • 我已经购买了SSL证书,并且从供应商那里收到了证书和作为私钥的. pem文件?现在我需要将此. pem密钥转换为bitnami Redmine Apache Web服务器的. key以使其正常工作。 我该怎么做?什么程序或命令来做?就使用Openssl等实现这一点而言,我是个新手。 任何建议将不胜感激! 谢谢你。

    • 如何生成<代码>。pem使用OpenSSL从PFX文件中获取CA证书和客户端证书。