Назад | Перейти на главную страницу

Исключение 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». Пожалуйста, помогите мне продолжить.

Я считаю, что это может произойти по нескольким причинам:

  • Закрытый ключ защищен паролем, что вы уже не подтвердили.

  • Каталог, содержащий ключи, зашифрован.

  • Права доступа к файлам в каталоге .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