我正在使用netbeans 7.2运行JDK 1.7和Windows 7,我已经使用putty-keygen生成了SSH私钥和公钥对(SSH2-2048位)。我没有私钥的密码。我现在正在尝试使用SFTP连接到其中一台主机。但是,当我传递私钥(ppk)来设置身份时,代码返回无效私钥错误。我在WinSCP中使用相同的私钥连接到相同的主机&它工作得很好。请帮助我解决这个错误。下面是我的代码:
JSch jsch = new JSch();
Session session = null;
try {
jsch.addIdentity("D:\\TEMP\\key.ppk");
session = jsch.getSession("tiabscp", "ssiw.support.qvalent.com", 22);
session.setConfig("StrictHostKeyChecking", "no");
//session.setPassword("");
session.connect();
Channel channel = session.openChannel("sftp");
System.out.println("Getting connected");
channel.connect();
System.out.println("connected successfully");
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("remotefile.txt", "localfile.txt");
sftpChannel.exit();
session.disconnect();
}catch (JSchException e) {
e.printStackTrace();
}catch (SftpException e) {
e.printStackTrace();
}发布于 2013-03-11 14:33:39
我猜您的密钥不是OpenSSH密钥文件格式。JSch要求私钥采用OpenSSH格式。
您可以按照here中描述的步骤,使用PuTTYgen转换您的私钥,使其与OpenSSH一起工作
按Load并选择使用密码创建的私钥以加载密钥。
发布于 2014-03-04 23:00:12
也许对你来说不是一个解决方案,但我在搜索我的问题时发现了这个问题。
当JSCH期望私钥文件时,我意外地给出了公钥文件的路径。
发布于 2014-01-29 20:00:06
您可以使用PEMWriter将私钥转换为JSch可以接受的PEM格式
下面的示例转换从Java KeyStore (JKS)返回的键。
Key privateKey = KeyStore.getKey(privateKeyAlias, keyStorePassword);//get key from JKS
StringWriter stringWriter = new StringWriter();
PEMWriter pemWriter = new PEMWriter(stringWriter);
pemWriter.writeObject(privateKey);
pemWriter.close();
byte[] privateKeyPEM = stringWriter.toString().getBytes();https://stackoverflow.com/questions/15332120
复制相似问题