Как я могу преобразовать PEM файл в строку для ssh в ec2, используя библиотеку JSch - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь подключиться к SSH к EC2, используя библиотеку JSch из кода Java. Я сослался на эту ссылку в SO Как я могу использовать содержимое файлов .pem в виде строки в соединении ec2, используя библиотеку JSch , и попробовал пару вещей, как указано ниже, но тщетно. Может кто-нибудь подсказать мне, как достичь моей цели?

Цель

У меня есть такой файл PEM. Я не хочу хранить свой файл PEM где-либо в AWS, поэтому мой подход заключается в извлечении эквивалентной строки, которую я могу кодировать и сохранять в базе данных, и декодировать ее из Java для передачи параметра в метод addIdentity, который принимает эти параметры:

addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
    throws JSchException
-----BEGIN RSA PRIVATE KEY-----
MIIepsdfAIBAAKCAQEAtBk068z
...
xVNdhlDy6asdk9wsdQ==
-----END RSA PRIVATE KEY-----

Для моей цели мой addIdentity метод был бы таким, как я полагаю:

addIdentity ("username","{privatekey string converted to byte array}",null, null)

Я пытаюсь понять, как эта строка может быть сформирована? Я очень плохо знаком с криптографией, но в ходе этого процесса я узнал, что, поскольку мой PEM имеет BEGIN RSA PRIVATE KEY, это формат PKCS1. Поддерживает ли JSch формат PKCS1 или его необходимо преобразовать в PKSC8?

Во-вторых, я узнал, что тело кодируется с помощью Base64, поэтому я даже попытался расшифровать строку с помощью Base64 после удаления всех возвратов каретки, верхнего и нижнего колонтитула, что привело к ошибке, подобной этой

Исключение в потоке "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: ошибка синтаксического анализа, не последовательность

Ниже приведены некоторые дополнительные ссылки, по которым я пытался перейти, но не смог их разрешить.

Надеюсь, кто-то может направить меня в правильном направлении.

Спасибо!

1 Ответ

0 голосов
/ 24 июня 2018

Я разобрался с ответом. Ниже пост дал мне направление.

JSch: addIdentity из закрытого ключа, хранящегося в hdfs

Для всех, кто хочет решить аналогичное требование, убедитесь, что вы не удалили информацию из верхнего и нижнего колонтитула. Это заняло большую часть моего времени для отладки, так как большинство постов в блогах / SO были направлены на удаление этих персонажей. В Java ваша строка должна иметь возврат каретки, иначе вы можете получить совсем другой байтовый массив.

String  x = "-----BEGIN RSA PRIVATE KEY-----\r\n" + 
            "MIIEpAIBAAKCAQEAtBk\Q/z4QAgk+LN3IUajqjUv7IucsCd4SebbQvah5t4WJ\r\n"

Преобразование строки в байтовый массив с использованием кодировки "US-ASCII". Используйте следующий метод JSch, если у вас нет ключевой фразы:

jsch.addIdentity("username",{bytearray of x},null, null)

Примечание: убедитесь, что вы передаете байтовый массив без знака, например:
Массив (45, 45, 69, ...)
а НЕ
Массив (45, -35, -125, ...)

...