Преобразовать открытый ключ OpenSSH в PKCS # 1 в формате HEX с пробелами и столбцами

Perl:

perl -0777 -pe 's{(?<=\bago\b)(.+)(?=<http)}{ ($repl=$1) =~ s/\s/_/g; $repl }sge' file

Notes:

  • -0777 превращает файл в одну строку
  • команда "outer" s/// находит все подстроки, которые вы хотите изменить
  • команда "inner" s/// заменяет все пробелы подчеркиванием.
3
30.12.2016, 01:39
4 ответа

Я провел одну ночь и нашел следующее решение:

Открытый ключ OpenSSH должен быть преобразован в PEM-кодированный открытый ключ PKCS # 1 , который находится в base64:

ssh-keygen -f id_rsa.pub -e -m pem

Затем используйте ] преобразователь base64 в HEX следующим образом: http://tomeko.net/online_tools/base64.php?lang=en

Введите строку без меток начала и конца

-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----

в преобразователь и нажмите кнопку «Конвертировать»

Например:

Вы вводите это в конвертер:

MIIBCgKCAQEA12g49WBnLyiIVCIJo1fzI8/LKOTtrXcRvYFZU8AsbhS43FDrHIgeUfh2dvBmbW/bW9KeGUhnfGy3FJyP7ahZVQX0SoX4sW7yZQyZM4dXqs6o4As+0oHe76P/aV+BTZmo3HbeJ7IDCNENDS2TMhdDPdIEwJHKXwlcreetSCKxytDKVj6kG6fde1/IX0R9t7IKPAeO9RYTeo94IUtfDnABvC0swkxSIyc8qs0UWC6WFXRlcq6jSldMATj+3c5mQHKYreFwrUSBEinUBszwjHHLYIdnaAT8Bcj9QFHEwS6ubJGYIpOkY2iQJQpt68T7NGyQxiJ1hIGJU503O4RJleLV9wIDAQAB

И вы получаете следующее:

3082010A0282010100D76838F560672F2888542209A357F323CFCB28E4EDAD7711BD815953C02C6E14B8DC50EB1C881E51F87676F0666D6FDB5BD29E1948677C6CB7149C8FEDA8595505F45F85F8B16EF2650C99338757AACEA8E00B3ED281DEEFA3FF695F814D99A8DC76DE27B20308D12D0D2D939617433DD204C091CA5F095CADE7AD4822B1CAE0CA563EA41BA7DD7B5FC85F447DB7B20A3C078EF516137A8F78214B5F0E7001BC2D2CC2439223273CAACD14582E9615746572AEA34A574C0138FEDDCE66407298ADE170AD44811229D406CCF08C71CB6087676804FC05C8FD4051C4C2AEAE6C91982293A4636890250A6DEBC4FB346C90C62275848349539D373B844978E2D7F70203010001

Для сетевого оборудования, такого как Huawei GPON OLT, коммутаторы или Juniper, вы должны немного отредактировать вывод в группы из 8 символов в 6 столбцах, например это: (через текстовый редактор добавьте классические пробелы и разрывы строк)

3082010A 02820101 00D76838 F560672F 28885422 09A357F3
23CFCB28 E4EDAD77 11BD8159 53C02C6E 14B8DC50 EB1C881E
51F87676 F0666D6F DB5BD29E 1948677C 6CB7149C 8FEDA859
5505F44A 85F8B36E F2650C99 338757AA CEA8E00B 3ED281DF
EFA3FF69 5F814D99 A8DC76DE 27B20308 D10D0D2D 93961743
3DD204C0 91CA5F09 5CADE7AD 4822B1CA D0CA563E B41BA7DD
7B5FC85F 447DB7B2 0A3C078E F516137A 8F78214B 5F0E7001
BC2D2CC2 43922327 3CAACD14 582E9615 746572AE A34A574C
0138FEDD CE664072 98FAE170 AD448112 29D416CC F08C71CB
60876768 04FC05C8 FD4051C4 C2AEAE6C 91982293 A4636890
250A6DEB C4FB346C 90C62275 84834953 9D373B84 4995E2D7
F7020301 0001

Теперь вы можете поместить этот открытый ключ RSA в консоль, сохранить, назначить ключ RSA пользователю, и теперь вы можете войти в систему, используя свой закрытый ключ SSH.

3
27.01.2020, 21:11

Формат соответствует ASN.1. , содержащий последовательность (30) длины 0x86 (80 86), содержащую целое число (02) длины 0x80 (81 80), за которым следует целое число (02) длины 1 (01). Это подходящий открытый ключ RSA.

Предполагая, что ключ SSH находится в файле id_rsa.pub, вы можете преобразовать его в нужный формат с помощью

ssh-keygen -f /dev/stdin -e -m PKCS8 -f id_rsa.pub |
openssl pkey -pubin -outform DER |
od -t x1 -An -w4 |
tr 'a-f' 'A-F' |
tr -d ' ' |
fmt -w 54

(Почему так сложно? Потому что)

.
5
27.01.2020, 21:11

Рецепт Жиля великолепен, но он не подходит для моих коммутаторов huawei 5720

но он работает после небольшой модификации

ssh-keygen -e -m pem -f ~/.ssh/id_rsa.pub | \
egrep -v  "BEGIN|END" | base64 -d | \
od -t x1 -An -w4 | tr 'a-f' 'A-F' | tr -d ' ' | fmt -w 72
0
27.01.2020, 21:11

Попробуйте этот вариант:

ssh-keygen -e -m pem -f ~/.ssh/id_rsa.pub | sed '1d;$d' | tr -d '\n' | base64 -d | xxd -c 24 -g 4 -u | sed -e "s/^.*: //" -e "s/.\{25\}$//g"

Проверено на Mac и Ubuntu, работает с маршрутизаторами Huawei AR120 -S.

Вас также может заинтересовать скрипт, который автоматически импортирует ваш ssh id на роутер :https://gist.github.com/TerryGeng/f24f07737ea7ff543838dd82bbbba31a

0
18.11.2020, 16:11

Теги

Похожие вопросы