LINUX.ORG.RU

Может кто то максимально детально объяснить как работает ssh авторизация по ключам

 ,


1

1

Я не уверен что совсем верно понимаю принцип авторизации по ssh с использованием ключей, именно за этим сюда и пришел.

На сколько я понимаю.

1. Создается пара ключей открытый и закрытый При создании закрытого (приватного) указываем пароль что бы защитить наш ключ (не совсем понимаю что именно защитить) я так понимаю пароль только на тот случай что если взломщик уже имеет shell в системе?

2. Закрытый ключ всегда лежит в папке юзера от чьего имени генерировались ключи ~/.ssh/

3. Открытый ключ всегда добавляется в файл authorized_keys

PS: Мы можем раздать этот паблик ключ всем пользователям или для каждого нужно создать свой?

4. Далее при подключении клиент просто указывает свой паблик ключ и подключается к системе.

5. Т. е в сам момент авторизации клиент отправляет свой паблик ключ а сервер при получении сверяет его со своей базой в authorized_keys(следовательно паблик ключи все разные иначе как понять кого пускать а кого нет если паблик ключ в свободном доступе)

PS: Если есть толковые люди которые могут исправить или дополнить то буду рад



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

Ман асинхронное шифрование. Асили и Боб расскажут тебе, каково отправлять сундуки по почте.

anonymous
()

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

Очень грубая аналогия - если приватный ключ это, гм, ключ, то публичный ключ - замок, к которому этот ключ подходит.

PolarFox ★★★★★
()

1. да

2. по умолчанию, но можно явно указать клиенту SSH, какой файл использовать

3. наличие открытого ключа в authorized_keys сервера - указание давать доступ тому клиенту, у которого есть соответствующий приватный ключ. Логика подсказывает, что можно сгенерировать разные публичные ключи по одному приватному, но зачем - хз.

4. вопрос непонятен. Если интересует точная последовательность действий - запусти какое-нибудь ssh-соединение с ключом -v

5. у клиента приватный ключ, у сервера - публичный. Я не знаю деталей, но, вероятно, клиент шлёт серверу какие-то данные, подписанные приватным ключом, и тот с помощью публичного убеждается в том, что у клиента есть приватный, и доступ можно дать.

6. я глупое поне и могу врать в любом из пунктов.

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

Всё с точностью до наоборот. Пара ключей генерируется на клиенте, затем публичный ключ закидывается на сервер. Сервер шифрует челлендж с помощью публичного ключа, таком образом клиент может его расшифровать. А не наоборот. Для каждого юзера генерируется своя пара ключей. Все публичные от них точно так же закидываются на сервер.

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

5. у клиента приватный ключ, у сервера - публичный. Я не знаю деталей, но, вероятно, клиент шлёт серверу какие-то данные, подписанные приватным ключом, и тот с помощью публичного убеждается в том, что у клиента есть приватный, и доступ можно дать.

Посылаемые данные шифруются с публичным ключом. Расшифровать их можно лишь с помощью приватного ключа. Не наоборот, блин. Толку от шифрования, если любой обладатель публичного ключа мог бы расшифровать данные, лол?

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

Хзлол, я думал, сервер шлёт клиенту рандом, клиент подписывает его приватным ключиком, сервер проверяет подпись с помощью публичного.

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

Логика подсказывает, что можно сгенерировать разные публичные ключи по одному приватному, но зачем - хз.

В RSA, например, приватный ключ это числа n и d, а публичный n и e. Здесь, вроде, нельзя иметь больше одного публичного ключа, из-за требования взаимной простоты.

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

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

Deleted
()
  1. Да, пароль нужен чтобы не спёрли твой приватный ключ.
  2. Это настраивается
  3. В authorized_keys ты заранее кладёшь публичные ключи пользователей, которые будут логиниться в этот аккаунт.
  4. При подключении ты указываешь какой приватный ключ использовать для того публичного который ты ранее закинул в authorized_keys. Если он зашифрован, то вводишь от него пароль (или используешь ssh-agent который закеширует пароль).
  5. Ничего никуда не отправляется. Удалённый комп использует ранее закинутый публичный ключ из authorized_keys. Если он не подойдёт к закрытому ключу (не получится расшифровать), то будет облом.
  6. Есть возможность после логина пробросить свой приватный ключ, чтобы с удалённого аккаунта логиниться дальше. Например чтобы коммитить с удалённого сервака в гит.
no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.