Jsch 异常:私钥验证失败

Jsch 异常:私钥验证失败

我正在使用下面的代码连接远程服务器,并按照以下步骤连接私钥/公钥生成并将公钥与授权密钥连接起来。

代码:

private Session createSession() throws JSchException {
        JSch jsch = new JSch();
            jsch.addIdentity(privateKey);                   //add private key path as ~/.ssh/id_rsa
            Session session;
            session = jsch.getSession(user, host, port);
            java.util.Properties config = new java.util.Properties();

        Properties cfg = new Properties();
            cfg.put("trust", "true");
            cfg.put("StrictHostKeyChecking", "no");
            cfg.put("HashKnownHosts", "yes");

            session.setConfig(cfg);
            session.connect();
            return session;
    }

脚步:

1. I can able to generate private/public key in the path ~/.ssh/id_rsa(private key) and ~/.ssh/id_rsa.pub(public key)
    >> ssh-keygen (or) ssh-keygen -t rsa -b 4096
   Note: Generated key with no passphrase
2. I have added public key with authorized_keys with below command
    >> ssh user@host "echo \"`cat ~/.ssh/id_rsa.pub`\" >> .ssh/authorized_keys"

我仍然遇到异常“com.jcraft.jsch.JSchException:Auth fail”。请指导我继续。

答案1

我认为发生这种情况的原因如下:

  • 私钥受密码保护,但您已验证事实并非如此。

  • 包含密钥的目录已加密。

  • .ssh 目录和/或公钥/私钥上的文件权限太开放。它们应该是:

    • ssh 目录:700
    • 公钥:644
    • 私钥:600(甚至可能是400)
  • 也可能是授权密钥文件中的公钥格式不兼容。您可能需要将其转换为其他格式。假设 OpenSSH:

    • 转换为 SSH2: ssh-keygen -i -f /path/to/private/key ssh-keygen -i -f /path/to/public/key
    • 从 SSH2 转换: ssh-keygen -e -f /path/to/private/key ssh-keygen -e -f /path/to/public/key

答案2

JSch 不支持 rsa-sha2。而且 JSch 似乎不再更新,很可能永远不会更新。试试这个ssh-keygen -m PEM -t rsa -b 2048是工作。

相关内容