web-dev-qa-db-ja.com

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」という例外に直面しています。先に進むために私を案内してください。

2
Shailu

これはいくつかの理由で発生する可能性があると思います。

  • 秘密鍵はパスワードで保護されていますが、すでに確認済みですが、そうではありません。

  • キーを含むディレクトリは暗号化されています。

  • .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
Murph