我正在使用 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 格式的私钥。