我使用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格式的私钥。
答案 0 :(得分:2)
标题“BEGIN SSH2 ENCRYPTED PRIVATE KEY”表示您的私钥是由ssh.com的专有ssh系统生成的。
还有其他图书馆比这更好吗?
如果你的密钥没有加密,JSch会接受它。
答案 1 :(得分:1)
您可以亲眼看到密钥不符合预期格式。你是怎么生成它的?