0

我正在使用 ganymed SSH2 java 库使用公钥身份验证连接到服务器。我已经创建了公钥/私钥对并将公钥 (mykey.pub) 上传到我的服务器的 /.ssh2 目录中。我在本地机器上有私钥。

密钥信息:2048 位 dsa 密钥对 (ssh2)

我正在做这样的事情:

File keyfile = new File("C:\\keys\\mykey");                  
String keyfilePass = "a"; // will be ignored if not needed

        try
        {

            Connection conn = new Connection(hostname);
            conn.connect();


            boolean isAuthenticated = conn.authenticateWithPublicKey("myusername", keyfile, keyfilePass); 
           //I get an error at this line

我得到的错误是:

Caused by: java.io.IOException: Invalid PEM structure, '-----BEGIN...' missing
    at ch.ethz.ssh2.crypto.PEMDecoder.parsePEM(PEMDecoder.java:138)

任何人都可以帮忙吗?还有比这更好的图书馆吗?

编辑:关键文件

---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Subject: username    Comment: "2048-bit dsa, username@host, Tue Jul 31 2012 13:12:48 -\
0500"
KEY   
---- END SSH2 ENCRYPTED PRIVATE KEY ----

解决方案:

我发现了问题,密钥必须转换为 OPENSSH 格式(为此我使用了 puttygen)。这个 java 库只接受 openssh 格式的私钥。

4

2 回答 2

2

标题“BEGIN SSH2 ENCRYPTED PRIVATE KEY”表示您的私钥是由 ssh.com 的专有 ssh 系统生成的。

还有比这更好的图书馆吗?

如果您的密钥未加密,JSch 将接受它。

于 2012-08-01T02:19:11.690 回答
1

您可以自己看到密钥不是预期的格式。你是如何产生它的?

于 2012-07-31T23:16:02.513 回答