java - 使用公钥的 sftp 无法正常工作

标签 java sftp jsch public-key

使用 ssh-keygen 生成 RSA 公钥。

尝试通过 sftp 连接远程服务器:

 JSch jsch = new JSch();
        try {

            String publicKey = "/home/testuser/.ssh/id_rsa.pub";
            jsch.addIdentity(publicKey);
            session = jsch.getSession(sftpUsername, sftpHostname, sftpPort);
            session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
        } catch (JSchException e) {
            logger.error("Unable to obtain session", e);
        }

出现以下错误:

com.jcraft.jsch.JSchException: invalid privatekey: /home/testuser/.ssh/id_rsa.pub
        at com.jcraft.jsch.IdentityFile.<init>(IdentityFile.java:261)
        at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:135)
        at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:130)
        at com.jcraft.jsch.JSch.addIdentity(JSch.java:206)
        at com.jcraft.jsch.JSch.addIdentity(JSch.java:192)

有什么建议吗?

最佳答案

你有:

jsch.addIdentity(publicKey);

JSch javadoc 说:

public void addIdentity(String prvkey) throws JSchException;

Adds an identity to be used for public-key authentication. Before registering it into identityRepository, it will be deciphered with passphrase.

Parameters:

  • prvkey - the file name of the private key file. This is also used as the identifying name of the key. The corresponding public key is assumed to be in a file with the same name with suffix .pub.

当 JSch 需要私钥时,您已经提供了公钥。

如果你仔细想想,这是有道理的。公钥没有什么 secret 。 JSch 想要一个 secret ,这样它就可以证明你是谁。

您的私钥可能位于 ~/.ssh/id_rsa 中(不带 .pub 扩展名)。

您可能需要使用 addIdentity 的两个参数版本,以便提供密码来解密私钥。

关于java - 使用公钥的 sftp 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788509/

相关文章:

java - 如何为 JAX-WS Web 服务客户端设置超时?

java - java中运行时连接和编译时连接的区别

linux - 创建一个 SFTP 用户以仅访问一个目录。

c# - 如何解决 SSH.NET 中的 'Bad packet length' 错误?

java - 在 Android Studio 中使用 JSch 连接到 SSH 时应用程序被强制关闭

java - 从 JSch 中的命令输出中删除 shell 内容(如提示)

java - 如何根据字符串位置读取文件并将其存储在变量中

java - 为什么 s3fs 不能像使用 Apache MINA SSHD 的普通文件系统一样工作?

java - sudo 登录后使用 Java JSch 程序执行多个 bash 命令

java - jarsigner 中的 *.SF 文件有什么意义?