当前位置: 首页 > 知识库问答 >
问题:

JSCH-无效私钥-在实际服务器中工作

闾丘永春
2023-03-14

我们正在尝试使用JSCH从远程服务器下载文件。尝试时,两台服务器之间已经建立了SFTP密钥交换

SFP username@hostname

它在不要求任何密码的情况下成功连接。但在java代码中,当我们尝试使用JSCH连接时,会出现无效私钥异常。

ERROR com.crer.log.debug - com.jcraft.jsch.JSchException: invalid privatekey:

我所做的代码如下所示

JSch jsch = new JSch();
            String privateKey = location of the private key on client server
            jsch.addIdentity(privateKey);
            session = jsch.getSession(stpUser, sftpHost, sftpPort);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();

编辑:

im使用的JSCH版本是0.1.54

私钥的开头就像

---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Subject: username
Comment: "2048-bit rsa, username@host, Tue Dec 13 2016 19:25:22 \
-0500"

我甚至尝试将私钥转换为openssh格式,但遇到了一些异常

ssh-keygen -i -f id_rsa_2048_a > id_rsa_2048_a_openssh
Private key -f is unreadable: Failed to open `-f': No such file or directory / Failed to read file `-f'.
Error: Cannot determine the type of the key.

如果我从命令中删除-f,它会工作,但我相信该文件没有正确转换,就像我使用该文件一样,我会得到相同的异常。

这里的任何帮助都会非常有用。不确定出了什么问题。

共有1个答案

禹兴安
2023-03-14

我最近在Jenkins ssh插件中遇到了这个问题,它也使用JSCH。

JSCH只接受旧的PEM格式私钥。它可以按如下方式生成:

ssh-keygen -m PEM -t rsa

-m PEM指示ssh keygen以JCSH可以接受的PEM格式输出。

 类似资料:
  • 我使用NetBeans7.2运行JDK1.7和Windows7,我使用putty-keygen生成了一个SSH私钥和公钥对(SSH2-2048位)。我没有任何私钥密码。我现在正尝试使用SFTP连接到其中一台主机。但是当我传递私钥(ppk)来设置身份时,代码返回无效私钥错误。我在WinSCP中使用了相同的私钥来连接到相同的主机&它工作得很好。请帮助我解决这个错误。下面是我的代码:

  • 问题内容: 我正在使用netbeans 7.2运行JDK 1.7和Windows 7,我已经使用putty- keygen生成了SSH私钥和公钥对(SSH2-2048位)。我没有私钥密码。我现在正在尝试使用SFTP连接到主机之一。但是,当我通过私钥(ppk)设置身份时,代码将返回无效的私钥错误。我在WinSCP中使用了相同的私钥来连接到相同的主机,并且工作正常。请帮助我解决错误。这是我的代码: 问

  • 问题内容: 我正在使用以下代码在Java应用程序中使用Git。我有一个有效的密钥(一直使用),并且之前使用相同的密钥和git存储库,此特定代码对我有用,但是现在出现以下异常: 无效的私钥:[B @ 59c40796。 在这一行: 我的完整代码: 在线搜索后,我将createDefaultJSch更改为使用pemWriter: 但是仍然会收到 “无效的私钥” 异常。 问题答案: 我也偶然发现了这个问

  • 我使用以下代码在Java应用程序中使用Git。我有一个有效的密钥(一直使用它),并且这个特定的代码在使用相同的密钥和git存储库之前对我有用,但是现在我得到了以下异常: 无效的私钥:[B@59c40796。 在这一行: 我的完整代码: 在线搜索后,我将createDefaultJSch更改为使用pemWriter: 但仍然得到“无效私钥”异常。

  • 我正在尝试建立到Unix服务器的连接,并使用SFTP放置/获取文件。我正在使用JCraft的Jsch 0.1.53和基于RSA令牌的身份验证。没有密码。 我使用IPSwitch软件生成了私钥和公钥,并在Unix服务器中为用户配置了公钥。 Ipswitch的store.ini文件类似于 私钥看起来像, stackoverflow和其他地方有很多例子。我试过了,但点击的是com.jcraft.jsch

  • 我在具有 identityserver4 的经过身份验证的应用程序中遇到此异常: 安全令牌验证签名异常: IDX10503: 签名验证失败。已尝试的密钥: 'Microsoft.IdentityModel.Tokens.RsaSecurityKey , KeyId: '.捕获的异常:“”。标记: '{“alg”:“RS256”,“典型值”:“JWT”}.{“nbf”:1501510053,“exp