LINUX.ORG.RU

Два вопроса насчет ssh подключения

 


0

1

Вопрос связан с этим алгоритмом.

В общих чертах, аутентификация посредством ключей происходит следующим образом:

1)Клиент отсылает серверу имя пользователя (username) и свой публичный ключ. 2)Сервер проверяет в файле /home/username/.ssh/authorized_keys наличие присланного клиентом открытого ключа. Если открытый ключ найден, то сервер генерирует случайное число и шифрует его открытым ключом клиента, после чего результат отправляется клиенту. 3)Клиент расшифровывает сообщение своим приватным ключом и отправляет результат серверу. 4)Сервер проверяет полученный результат на совпадение с тем числом, которое он изначально зашифровал открытым ключом клиента, и в случае совпадения считает аутентификацию успешной.

Как и обещал пара вопросов:

  1. Как ssh утилита «знает» какой публичный ключ (пункт 1.) отсылать на сервер? Если у меня в каталоге ~/.ssh несколько ключей?

  2. Если в ~/.ssh лежит приватный ключ защищенный паролем и рядом нет публичного ключа, то как ssh определит публичный ключ из него(для отправки на сервер) не зная пароль?


свой публичный ключ ты в открытом виде посылаешь. это ASSиметричное шифрование: шифруешь публичным ключом, а расшифровать можешь только приватным

tz4678_2
()
Последнее исправление: tz4678_2 (всего исправлений: 1)

1. По умолчанию используется один ключ ~/ssh/id_rsa, в настройках можешь поменять на другой. Но вообще сам протокол не запрещает отправку нескольких публичных ключей по очереди до тех пор, пока сервер один из них не одобрит. Возможно, это даже штатная возможность стандартного клиента, но я не изучал этот вопрос.

2. Ну тут два очевидных варианта:

а) даже в запароленном приватном ключе рядом лежит незапароленный публичный (в том же файле в том же base64 блоке)

б) он всё-таки спросит пароль чтобы узнать публичный ключ

Какой из них правильный - не знаю, но так ли это важно? Всё равно без знания приватного ключа ничего не получится.

firkax ★★★★★
()
Ответ на: комментарий от firkax

а) даже в запароленном приватном ключе рядом лежит незапароленный публичный (в том же файле в том же base64 блоке)

Вот тоже насчет этого сомневаюсь. Просто запароленый ключ ssh проигнорил, либо как-то смог получить из него публичный ключ

VolanQ
() автор топика
Ответ на: комментарий от firkax

Вот так я получаю публичный и пароль спрашивает.

ssh-keygen -y -f id_rsa

Склоняюсь, что нельзя получить публичный(не зная пароля) из запароленного приватного.

VolanQ
() автор топика
Последнее исправление: VolanQ (всего исправлений: 1)
Ответ на: комментарий от VolanQ

Можешь ssh -vvv сделать и найти в логах спрашивает ли он пароль до отправки публичного ключа или после. Но, повторю, по-моему это ни на что не влияет, без приватного ключа (для которого пароль точно нужен) всё равно не подключиться.

firkax ★★★★★
()

То, что ты описал, это прям совсем в общих чертах. На самом деле всё сложней.

По конкретным вопросам.

  1. Клиент отправляет серверу все ключи вида ~/.ssh/id_*, а также те, которые загружены в ssh agent.

  2. Клиент всегда достаёт открытый ключ из файла с закрытым ключом. Файл ~/.ssh/id_xxx.pub создаётся исключительно для твоего удобства, для работы ssh он не нужен.

  3. Точно не уверен, но скорей всего публичный ключ не шифруется, шифруется только закрытый ключ, а публичный ключ лежит там же в открытом виде и отсылается на сервер. Если сервер захочет его использовать, тогда клиент спросит пароль.

vbr ★★★
()
Ответ на: комментарий от vbr

Спасибо! Кстати, в виндовом Putty в приватном ключе можно посмотреть публичный не зная пароля. А вот на моей Ubuntu с помощью

ssh-keygen -y -f ~/.ssh/id_rsa

нельзя выудить публичный если не знаешь пароль

VolanQ
() автор топика
Ответ на: комментарий от tz4678_2

А сможешь узнать публичный ключ? =)

-----BEGIN OPENSSH PRIVATE KEY-----
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
JiP3zX6oZutgPrhUg/VtzVdYW0g=
-----END OPENSSH PRIVATE KEY-----
VolanQ
() автор топика
Ответ на: комментарий от tz4678_2

Вопрос остается открытым: как, имея приватный запароленный ключ получить публичный (не зная пароль и не делая переборов).

VolanQ
() автор топика
Последнее исправление: VolanQ (всего исправлений: 1)
Ответ на: комментарий от VolanQ

никак. но можешь прсканить инет на https://target/.ssh/id_rsa. у многих сайты из хомяка сервятся, а там собирай статистику сколько запароленных, сколько доступных… заодно побрутишь их хешмапом каким

tz4678_2
()
Ответ на: комментарий от tz4678_2

а может как-то возможно?

вопрос «при аутентификации по ключам клиент отправляет серверу публичный ключ, который сервер сравнивает с ключами authorized_keys» не дает мне покоя, как клиент получил публичный без пароля.

Отпечаток публичного ключа же я могу получить не зная пароль:

ssh-keygen -lv -f id_rsa

Может быть ssh внутри сравнивает отпечаток на клиенте и тот что лежит в authorized_keys ? Вроде логично, но врятли это так работает.

VolanQ
() автор топика
Ответ на: комментарий от VolanQ

Открытый ключ - это умножение закрытого ключа на эллиптическую кривую (K = k * G ,из ихkЭто закрытый ключ,GЯвляется ли постоянная точка, называемая точкой генерации, иKПолучается по алгоритму «открытый ключ»), что является необратимым процессом, то есть невозможно обратно вычислить закрытый ключ, рассчитанный из открытого ключа.

tz4678_2
()