Основной вопрос:
Есть ли способ подключиться к sshd-серверу изнутри программы Java, когда сервер применяет механизм аутентификации publi c -key, и пара ключей должна храниться в Токены PKCS # 11?
Пояснение:
Я могу подключиться к серверу из консоли с помощью следующей команды:
ssh -I myPkcs11TokenLib.so myUserName@myHostName
Итак, похоже, что все настроено правильно на sshd.
Мне также удалось установить sh соединение внутри Java программы, используя jsch
, когда сервер был настроен на использование аутентификации на основе пароля. Пример кода:
JSch jsch = new JSch();
Session sshSession = jsch.getSession("myUserName", "myHostName", 22);
sshSession.setPassword("myPass");
sshSession.setConfig("StrictHostKeyChecking", "no");
sshSession.connect(5000);
Более того, я знаю, что jsch
имеет метод public void addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
для аутентификации publi c -key.
Однако я НЕ знаю как я могу прочитать пару ключей из моего токена PKCS # 11 и преобразовать ее в соответствующий формат , приемлемый для вышеупомянутого метода.
Даже если я извлекаю закрытый ключ из токена и соответствующим образом передаю это метод addIdentity
, это не совсем то, что предназначено для аутентификации на основе токенов. Насколько мне известно, команда ssh -I
не извлекает закрытый ключ из токена. Вместо этого он перенаправляет функции publi c cryptographi c (например, знак RSA) на токен. В отличие от метода addIdentity
требуется простой закрытый ключ. Таким образом, в некоторых ситуациях он не будет достаточно безопасным. (Закрытый ключ попадает в оперативную память просто!)
Короче говоря, я хочу знать, есть ли способ имитировать ssh -I
в Java программе , чтобы установить sh подключение к sshd серверу?