JSCH - 私钥无效

2022-09-02 23:44:01

我正在使用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();
}

答案 1

我猜你的密钥不是OpenSSH密钥文件格式。JSch期望私钥采用OpenSSH格式。

您可以使用PuTTYgen将您的私钥转换为使用OpenSSH,方法是按照此处描述的步骤操作

  1. 按“加载”并选择使用 PuTTYgen 创建的私钥。
  2. 输入密码以加载密钥。
  3. 从“转换”菜单中选择导出 OpenSSH 密钥
  4. 保存私钥。

答案 2

也许不是你的解决方案,但是当我搜索我的问题时,我发现了这个问题。

当JSCH期望私钥文件时,我不小心给出了公钥文件的路径。


推荐