SSH: различия между версиями

Материал из SysWiki
Ссылка на будущую статью про PuTTY
написан раздел про аутентификацию
Строка 1: Строка 1:
'''SSH''' — сетевой криптографический протокол, предназначенный для безопасного доступа к удалённой командной оболочке, а также для создания защищённых туннелей.
'''SSH''' — сетевой криптографический протокол, предназначенный для безопасного доступа к удалённой командной оболочке, а также для создания защищённых туннелей.
Протокол SSH основан на клиент-серверной архитектуре, работает по протоколу TCP, стандартный порт для сервера SSH — 22. Он является основным вариантом для удалённого администрирования UNIX-подобных операционных систем, предоставляя защищённый доступ к командной оболочке по незащищённой сети. Аутентификация при работе по SSH обычно осуществляется при помощи логина и пароля или при помощи алгоритмов электронной подписи с открытым ключом, хотя существует вариант аутентификации по IP-адресу.
== Аутентификация при подключении к серверу SSH ==
=== Аутентификация по паролю ===
Наиболее простой вариант подключения по SSH к удалённой машине следующий: пользователь запускает SSH-клиент, указывая адрес удалённой машины, после чего SSH-клиент подключается к ней, причём при первом подключении пользователю будет показан отпечаток ключа сервера, это необходимо, чтобы избежать атаки типа [[MITM]]. Предполагается, что пользователь знает отпечаток ключа удалённой машины и может его проверить. После подтверждения со стороны пользователя данный отпечаток запоминается SSH-клиентом, и используется при следующих подключениях автоматически. Далее у пользователя запрашиваются логин и пароль, после успешной аутентификации пользователю открывается доступ к командной оболочки на удалённой машине.
=== Аутентификация с использованием алгоритмов электронной подписи с открытым ключом ===
Данный вариант считается более безопасным и удобным, чем вариант с аутентификацией по паролю. Для его использования необходимо сгенерировать пару ключей, обычно это делается приложением, которое идёт в комплекте с SSH-клиентом. Закрытый ключ пользователь должен хранить в тайне от остальных (более того, приложение предложит ввести пароль для того, чтобы закрытый ключ хранился зашифрованным), а открытый ключ нужно передать администратору удалённой машины для того, чтобы он добавил его в список разрешённых для SSH-сервера (это может делаться, например, добавлением ключа в файл .ssh/authorized_keys в домашнем каталоге пользователя на сервере). Для пользователя установление связи с удалённой машиной выглядит примерно так же, как в предыдущем варианте, но, в случае успешной аутентификации по ключу, пароль не запрашивается.
Данные открытого ключа выглядят следующим образом: это строка, в начале которой идёт информация о типе ключа (например, «ssh-ed25519» или «ssh-rsa»), далее, через пробел, идёт сам ключ в виде последовательности символов (размер которой зависит от типа ключа и его длины), далее, опять же, через пробел, может идти комментарий.
Пример строки с ключом:
<code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE5rD/4RXDAsVtB4aVUJdFpfCiKIbFGrYxyKpk6php/F My personal key</code>
Иногда, по ошибке, администратору удалённой машины пересылается не открытый ключ, а закрытый (обычно он хранится в файле с похожим названием), что является грубой ошибкой: один и тот же ключ может использоваться для доступа к разным серверам, и администратор одного из них, получив ошибочно высланный ключ, получит техническую возможность подключаться от имени пользователя к другим серверам. Отправлять третьим лицам закрытый ключ не следует, при этом отправка открытого ключа может считаться безопасной.
Некоторые приложения для генерации ключей могут разбивать длинную строку на несколько более коротких строк, при этом на сервере может потребоваться привести его к описанному выше виду.


== Приложения для работы по протоколу SSH ==
== Приложения для работы по протоколу SSH ==

Версия от 23:42, 28 января 2024

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

Протокол SSH основан на клиент-серверной архитектуре, работает по протоколу TCP, стандартный порт для сервера SSH — 22. Он является основным вариантом для удалённого администрирования UNIX-подобных операционных систем, предоставляя защищённый доступ к командной оболочке по незащищённой сети. Аутентификация при работе по SSH обычно осуществляется при помощи логина и пароля или при помощи алгоритмов электронной подписи с открытым ключом, хотя существует вариант аутентификации по IP-адресу.

Аутентификация при подключении к серверу SSH

Аутентификация по паролю

Наиболее простой вариант подключения по SSH к удалённой машине следующий: пользователь запускает SSH-клиент, указывая адрес удалённой машины, после чего SSH-клиент подключается к ней, причём при первом подключении пользователю будет показан отпечаток ключа сервера, это необходимо, чтобы избежать атаки типа MITM. Предполагается, что пользователь знает отпечаток ключа удалённой машины и может его проверить. После подтверждения со стороны пользователя данный отпечаток запоминается SSH-клиентом, и используется при следующих подключениях автоматически. Далее у пользователя запрашиваются логин и пароль, после успешной аутентификации пользователю открывается доступ к командной оболочки на удалённой машине.

Аутентификация с использованием алгоритмов электронной подписи с открытым ключом

Данный вариант считается более безопасным и удобным, чем вариант с аутентификацией по паролю. Для его использования необходимо сгенерировать пару ключей, обычно это делается приложением, которое идёт в комплекте с SSH-клиентом. Закрытый ключ пользователь должен хранить в тайне от остальных (более того, приложение предложит ввести пароль для того, чтобы закрытый ключ хранился зашифрованным), а открытый ключ нужно передать администратору удалённой машины для того, чтобы он добавил его в список разрешённых для SSH-сервера (это может делаться, например, добавлением ключа в файл .ssh/authorized_keys в домашнем каталоге пользователя на сервере). Для пользователя установление связи с удалённой машиной выглядит примерно так же, как в предыдущем варианте, но, в случае успешной аутентификации по ключу, пароль не запрашивается.

Данные открытого ключа выглядят следующим образом: это строка, в начале которой идёт информация о типе ключа (например, «ssh-ed25519» или «ssh-rsa»), далее, через пробел, идёт сам ключ в виде последовательности символов (размер которой зависит от типа ключа и его длины), далее, опять же, через пробел, может идти комментарий.

Пример строки с ключом:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE5rD/4RXDAsVtB4aVUJdFpfCiKIbFGrYxyKpk6php/F My personal key

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

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

Приложения для работы по протоколу SSH

Клиентские приложения

Серверные приложения

  • sshd (OpenSSH)