Последовательность аутентификации SSH и файлы ключей: объяснение
В качестве фона для устранения различных проблем, связанных с использованием SSH и rsync с парами ключей, я хотел получить простой обзор последовательности событий, происходящих во время аутентификации SSH, и того, как каждый из нескольких файлов клиента и хоста играет свою роль.
Google нашел много объяснений на детальном уровне, либо с узким охватом, либо с широким охватом, который был загроможден этими подробностями. Не говоря уже о многих неправильных или запутанных объяснениях и сообщениях на форуме.
В итоге я создал пару диаграмм, чтобы прояснить две вещи:
- Какие файлы и действия участвуют в подготовке к SSH-коммуникации с использованием ключей
- Что эти файлы делают в процессе установления соединения.
Я опубликую их в ответе ниже.
1 ответ
В следующем ответе объясняются файлы, необходимые для подготовки к ssh-аутентификации с использованием пар открытого-закрытого ключей ("Инфраструктура открытых ключей" или "PKI"), и как эти файлы используются во время реального сеанса ssh. Некоторые особенности здесь используют имена и каталоги, которые применяются к linux, но принципы применяются ко всем платформам, которые используют программы и файлы, параллельные им. Основные особенности, представляющие интерес:
- Пользовательская машина
- Пара ключей пользователя: открытый и закрытый, который пользователь на стороне клиента должен создать с помощью ssh-keygen, создавая файлы с такими именами, как:
- ~ /.ssh / id_rsa (личное) и
- ~ /.ssh / id_rsa.pub (общедоступный)
- При подготовке, должен быть передан в файл author_keys хоста
- ~ /.ssh / known_hosts
- который получает открытый ключ от сервера, если пользователь принимает его при первом входе в систему.
- Пара ключей пользователя: открытый и закрытый, который пользователь на стороне клиента должен создать с помощью ssh-keygen, создавая файлы с такими именами, как:
- Хост (сервер) машина
- Пара ключей хоста: публичный и приватный
- автоматически создаются в какой-то момент, например, установка openssh на сервере. Типичные имена:
- / etc / ssh / ssh_host_rsa_key (private)
- / etc / ssh / ssh_host_rsa_key.pub (общедоступный)
- host предлагает открытый ключ пользователю на стороне клиента в первый раз, когда пользователь на стороне клиента пытается соединиться с ssh. Клиент будет хранить ключ хоста в known_hosts
- ~ /.ssh / authorized_keys
- При подготовке должен быть предоставлен открытый ключ каждого пользователя, который будет входить в систему.
- Пара ключей хоста: публичный и приватный
- Последовательность событий в реальном сеансе SSH (или rsync), показывающая, как задействованы файлы.
(Обратите внимание, что есть два разных общих алгоритма подписи, RSA и DSA, поэтому там, где в этом обсуждении используется "rsa", вместо этого может появиться строка "dsa".)
Конфигурация / подготовка
SSH соединение и использование
Я надеюсь, что эти диаграммы будут полезны.