Привет, Хабр! На связи Кирилл, сисадмин в Selectel. Если вы только начинаете свой путь в системном администрировании, то наверняка задумывались, что происходит «под капотом» Linux при вводе логина и пароля. Давайте заглянем в потроха системы, чтобы: разобраться, как она удостоверяется в подлинности пользователя; сравнить привычные пароли и SSH-ключи; настроить сервер для безопасной работы. Добро пожаловать под кат.

Используйте навигацию, если не хотите читать текст целиком:
Аутентификация и авторизация
Типы аутентификации
Почему же SSH-ключи лучше паролей
Неутешительная статистика
Настройка доступа по SSH-ключу
Ни на что не намекаю, но…

Аутентификация и авторизация


В современных дистрибутивах Linux за проверку полномочий пользователя отвечает подсистема PAM (Pluggable Authentication Module) — гибкий механизм, который поддерживает разные способы аутентификации. Например, при входе пользователя пароль может проверяться как локально (файлы /etc/passwd и /etc/shadow), так и с привлечением внешних сервисов (LDAP, ключи SSH и других). Выбор зависит от конфигурации PAM и настроек администратора системы. Когда проверка успешно пройдена, для пользователя устанавливается сеанс с соответствующими правами.

Уверен, вы и без меня это знаете, но давайте повторим еще раз.
  • Аутентификация — это процесс подтверждения личности пользователя. Система удостоверяется, что он — действительно тот, за кого себя выдает. Для этого нужны учетные данные — например, пара логин‑пароль или криптографический ключ.
  • Авторизация — это процесс предоставления прав доступа после успешной аутентификации. Теперь система решает, что именно пользователь может делать: какие файлы читать и команды выполнять, а также устанавливает для него другие подобные разрешения и ограничения.



Типы аутентификации


Linux поддерживает несколько способов аутентификации. Как несложно догадаться даже по заголовку статьи, два наиболее распространенных из них: парольная и по SSH-ключу.

Парольная аутентификация


Это классический способ входа в систему. Указывая свой логин, пользователь как бы говорит ОС: «Привет! Я ». Затем он приводит пруфы, вводя пароль. И при локальной работе, и при удаленном доступе процесс парольной аутентификации практически идентичен. Несущественное отличие — интерфейс для ввода учетных данных: это может быть GUI‑форма или терминал. В любом случае по комбинации логина и пароля система удостоверяется в подлинности пользователя и авторизует его.

В Debian и дистрибутивах‑наследниках, таких как Ubuntu или SelectOS, учетные записи пользователей хранятся в файле /etc/passwd, а хэши паролей — в защищенном /etc/shadow. Прямой доступ к последнему разрешен только привилегированным процессам — запущенным от имени root. Однако даже они не смогут увидеть пароли ни при каких обстоятельствах — хранятся только их хэши.

Специальный модуль PAM необратимо преобразовывает введенный пароль и сравнивает полученный результат с сохраненным в /etc/shadow хэшем. Применяемый алгоритм и «соль» также указываются в строке с хэшем. В современных дистрибутивах Linux обычно используется SHA-512 с «солью» вместо устаревшего DES/MD5. Таким образом, проверка выполняется безопасно — реальные пароли не передаются и не хранятся в открытом виде.

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

Как я сказал выше, парольная аутентификация может быть как локальной, так и удаленной. В последнем случае, как правило, используется протокол SSH (Secure Shell). Конечно, его механизм может использоваться не только для парольной аутентификации — и об этом мы подробно поговорим ниже. Важно знать, что в основанных на Debian-дистрибутивах OpenSSH-сервер по умолчанию разрешает вход по паролю всем, кроме, возможно, пользователя root. Параметр PasswordAuthentication в файле /etc/ssh/sshd_config управляет этой возможностью: значение yes разрешает парольную аутентификацию, no — запрещает.

Протокол SSH шифрует весь трафик, поэтому сам пароль передается на сервер в защищенном виде. Демон sshd на сервере расшифровывает полученный пароль. Далее модуль PAM вычисляет хэш и соотносит его с записью в /etc/shadow.

У паролей есть несколько существенных недостатков


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

Сложные уникальные пароли трудно запоминать. Рекомендации безопасности требуют создавать длинные пароли, состоящие из случайных символов. Однако человек не может держать много несуразных строк в памяти. Как итог, в ход идут записи в открытом виде, которые хранятся в небезопасных местах, на виду у всех желающих. А еще их можно потерять.

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

Пароль можно выведать или перехватить на стороне клиента. Пароль — это секрет, известный пользователю, и который он вынужден вводить вручную. Его могут подсмотреть через плечо, украсть с помощью кейлоггера или вируса.

Управление паролями на множестве серверов становится нетривиальной задачей. Для десятков машин администратору пришлось бы хранить где-то список разных сложных паролей, регулярно их менять, следить за сроком действия и тому подобным. Такая сложность вызывает неудобство и чревата ошибками. Один скомпрометированный пароль — и под угрозой вся система, если не включена двухфакторная защита.

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

SSH-авторизация: что это такое и как работают SSH-ключи


SSH (Secure Shell) — сетевой протокол для защищенного удаленного доступа к системе. Его название переводится как «безопасная оболочка». Протокол обеспечивает шифрование соединения и проверку подлинности обеих сторон. SSH дает возможность подключиться к удаленному серверу и выполнять команды в терминале так же, как если бы использовалось локальное подключение на той же машине.

Работа строится по модели клиент-сервер: на удаленном узле должен быть запущен SSH-демон (служба sshd), который «слушает» сетевой порт (стандартно 22) и ожидает входящих подключений. На стороне пользователя используется SSH-клиент — программа, которая инициирует соединение, проходит аутентификацию, а также шифрует и дешифрует данные.

OpenSSH — наиболее популярная реализация SSH в Linux. В дистрибутивах, унаследованных от Debian, клиентская часть OpenSSH уже присутствует в системе. Для развертывания серверной части достаточно установить пакет openssh-server — служба запустится автоматически и сможет принимать входящие SSH-подключения. Конфигурация сервера хранится в файле /etc/ssh/sshd_config, где задаются параметры аутентификации, используемые протоколы шифрования и прочие настройки.

Для подключения по SSH пользователь вводит команду вида:

ssh <user>@<host>

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

Принцип работы SSH-ключей основан на асимметричном шифровании. Приватный ключ шифрует данные. Обратное преобразование может выполнить только связанный с ним публичный ключ. По названию ключей можно видеть и принципы обращения с ними.

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

Публичный ключ не является секретом и может свободно передаваться по сети — он копируется на целевой сервер и обычно сохраняется в домашней директории пользователя на сервере в специальном файле ~/.ssh/authorized_keys.

Во время подключения по SSH сервер отправляет клиенту случайную строку (челлендж), которую клиент подписывает своим приватным ключом и отправляет обратно. Сервер, используя публичный ключ, проверяет подпись. Если она корректна, доступ предоставляется, в противном случае — отклоняется. Таким образом, подтверждается владение приватным ключом без передачи каких-либо секретных данных по сети. Пароль при этом не нужен вовсе.


Рекомендуется, чтобы каждый администратор или процесс заводил свою пару ключей. В файле authorized_keys на сервере можно записать несколько публичных ключей, по одному на каждого пользователя, которому разрешен доступ. Тогда в случае компрометации какого‑либо ключа отозвать придется только его — доступ остальных никак не будет затронут.

При необходимости, SSH-ключи можно дополнить вспомогательной защитой. Один из примеров — ограничение возможности входа только с определенных IP-адресов. Другой вариант — добавление двухфакторной авторизации, ведь протокол SSH позволяет требовать одновременно и ключ, и одноразовый код, получаемый, например, через PAM-модуль Google Authenticator.

Почему же SSH-ключи лучше паролей


Вот основные аргументы в пользу ключей.

Стойкость к взлому


Пароль длиной 8-10 символов можно относительно быстро подобрать. Это делается или перебором, или с помощью словаря, особенно если пароль распространенный. SSH-ключ же — это последовательность из сотен случайных символов, чаще всего длиной 2 048 или 4 096 бит. Длина и энтропия таких ключей на порядки превышают даже самые сложные пароли.

Полный перебор всех возможных SSH-ключей невозможен даже с помощью сверхмощных современных компьютеров. Фактически такая задача потребует миллионы лет вычислений. Как следствие, отказ от входа по паролю в пользу ключей исключает саму возможность подобного способа проникновения на сервер. Многочисленные боты, постоянно атакующие серверы по SSH, просто не смогут ничего предпринять — подобрать ключ невозможно, а на угадывание пароля у них будет ни одной попытки.

Конфиденциальность приватного ключа


Существенное преимущество SSH-ключей в том, что приватный ключ никогда не покидает машину пользователя и не передается по сети. Украсть его через сеть невозможно. Даже перехватив трафик SSH, который еще и зашифрован, злоумышленник не получит никакой полезной информации о самом приватном ключе.

На сервере же хранится только публичный ключ, раскрытие которого не несет риска компрометации — с его помощью только сверяются вызовы и ответы. Он как «замок на двери» — без приватного ключа его «не открыть». При использовании пароля, хотя SSH и шифрует соединение, атаки все еще возможны на стороне клиента — например, установкой кейлоггеров или простым подглядыванием.

Устойчивость к компрометации сервера и утечкам данных


Злоумышленник может скомпрометировать сервер, где хранятся хэши паролей — например, получит права root и скопирует файл /etc/shadow. Тогда он может попытаться взломать пароли офлайн, перебирая комбинации и сравнивая получающийся хэш. При использовании ключей такая атака бессмысленна: на сервере нет секретов, пригодных для подбора, как нет и приватного ключа.

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

Исключение человеческого фактора


Ключ не нужно помнить, его нельзя выбрать «слишком простым» случайно. Пользователь не сможет установить тривиальный SSH-ключ подобно тому, как может придумать слабый пароль вроде «12345». Уходит риск использования легко угадываемых или слабых комбинаций.

Удобство, гибкость и автоматизация


С SSH-ключами можно использовать одну пару ключей для доступа к разным своим серверам (либо сгенерировать отдельную пару для разных групп машин). Это гораздо удобнее управления множеством уникальных паролей для каждого ресурса. Не нужно каждый раз вводить пароль при подключении: аутентификация происходит автоматически.

Удобство особенно ощутимо при частых подключениях или использовании автоматизированных скриптов и систем оркестрации. К примеру, Ansible и Terraform используют ключи для доступа к серверам без участия человека. Такой подход безопаснее, чем хранение паролей в скриптах в открытом виде.

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

Концептуальное преимущество: владение против знания


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

Конечно, идеальный вариант — это комбинация методов. Например, можно использовать закрытый ключ на аппаратном токене вместе с PIN-кодом или в связке с одноразовым кодом. Однако в контексте выбора «пароль или ключ» последний выигрывает по всем параметрам.

SSH-аутентификация по ключам при правильном подходе практически лишена недостатков паролей. SSH-ключи однозначно безопаснее и предпочтительнее для удаленной работы. Единственный относительный минус — новичкам может показаться сложной первоначальная настройка. Нужно сгенерировать ключи и узнать о том, где они размещаются и как их использовать. Однако существуют инструменты и практики, делающие управление ключами удобным и централизованным.

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

Неутешительная статистика


Статистика инцидентов информационной безопасности лишний раз подтверждает слабость паролей как меры защиты.

Первая атака подбором пароля наблюдается уже через 10-15 минут после подключения свежеразвернутого сервера к сети. Об этом говорят данные наших ИБ‑специалистов в Selectel. Далее атаки продолжаются постоянно, сканируя машину в поисках открытых SSH-портов.

В год фиксируются десятки миллионов попыток входа. Компания Rapid7 провела исследование на ловушках (honeypot) SSH и RDP и предоставила данные за 2021-2022 годы. Было выявлено свыше 216 000 уникальных IP-адресов атакующих и более 512 000 паролей, использованных в этих атаках. Подавляющее большинство паролей — распространенные, которые даже собраны в специальные словари. В первую пятерку вошли: 123456, nproc, test, qwerty и password — то есть откровенно слабые значения.

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

81% взломов аккаунтов в 2022 году были вызваны слабыми, повторно используемыми или украденными паролями. Об этом рассказывает отчет LastPass. Иными словами, восемь из десяти успешных атак на информационные системы, так или иначе, эксплуатировали уязвимости, связанные с паролями. Это могут быть фишинговые кражи, утечки баз данных паролей, перебор простых комбинаций или использование паролей, украденных с других сервисов.

2/3 атак на облачные сервисы связаны с уязвимыми учетными данными — еще один тревожный сигнал. Причина та же — отсутствие или слабый пароль, о чем говорят данные Google Cloud за вторую половину 2023 года. Пароли остаются «слабым звеном», через которое злоумышленники получают первоначальный доступ перед развитием атаки.

Все данные однозначно указывают: опираться только на парольную защиту — крайне рискованно. Особенно важна безопасность для серверов, которые всегда доступны в сети и являются постоянной мишенью. В то же время случаев компрометации SSH при использовании только ключей практически не происходит, если соблюдаются базовые правила:
  • сложный ключ и современный алгоритм,
  • защита приватного ключа,
  • отключение входа по паролю.

Статистика атак подтверждает: переход на аутентификацию по криптографическим ключам кардинально снижает вероятность взлома.

Настройка доступа по SSH-ключу


В дистрибутивах на основе Debian OpenSSH-сервер поддерживает авторизацию по ключам по умолчанию (директива PubkeyAuthentication yes включена). Чтобы настроить вход по SSH-ключу, требуется сгенерировать ключ и установить публичный ключ на сервер. Ниже приведен общий порядок.

1. Генерация ключевой пары на клиенте. В терминале пользователя на локальной машине, с которой будет осуществляться доступ, выполните команду генерации ключа. Например, для RSA 3 072 бит (значение по умолчанию для OpenSSH), команда будет следующая:

ssh-keygen -t ed25519 -C

По умолчанию будет предложен путь для сохранения ~/.ssh/id_ed25519. Можно изменить его, указав путь, относительно домашнего каталога — например:

Enter file in which to save the key (/home/alex/.ssh/id_ed25519): .ssh/my_key

Кроме того, по желанию можно ввести парольную фразу для защиты ключа. После завершения команды появятся два файла: приватный и публичный ключи — ~/.ssh/my_key и ~/.ssh/my_key.pub.

2. Установка публичного ключа на сервере. Проще всего сделать это утилитой ssh-copy-id, если пока еще доступен вход по паролю. По умолчанию утилита пытается скопировать первый найденный ключ — обычно это ~/.ssh/id_rsa.pub или ~/.ssh/id_ed25519.pub. Если ключей несколько, нужно указать, какой из них использовать. Скопируем ключ из нашего примера — my_key.pub.

ssh-copy-id i ~/.ssh/my_key.pub <имя_пользователя>@<адрес_сервера>

Утилита попросит текущий пароль пользователя на сервере, а затем автоматически скопирует содержимое my_key.pub в файл ~/<имя_пользователя>/.ssh/authorized_keys на сервере. Если директория .ssh или файл authorized_keys не существуют, они будут созданы.

Можно также скопировать публичный ключ вручную. Для этого сохраняем его в подходящее место на сервере, а затем добавляем к содержимому ~/.ssh/authorized_keys. Например, можно воспользоваться утилитой scp (Secure Copy):

scp ~/.ssh/my_key.pub <имя_пользователя>@<адрес_сервера>:~/
cat ~/my_key.pub >> ~/.ssh/authorized_keys

Разумеется, чтобы выполнить подобную операцию, у пользователя должен быть и доступ на сервер, и соответствующие права.

3. Проверка входа по ключу. Проверим работоспособность SSH — попробуем подключиться к серверу, указав ключ:

ssh -i ~/.ssh/my_key.pub <имя_пользователя>@<адрес_сервера>

При первом подключении сервер попросит подтвердить отпечаток его ключа — так и должно быть, введите yes и нажмите Enter. Если приватный ключ защищен дополнительным паролем, система запросит его. После этого мы должны попасть на удаленную систему — приглашение в терминале изменится. Можно также всегда набрать выполнить команду hostname — она всегда покажет название текущего хоста.

4. Отключение парольной авторизации (рекомендуется). Добившись работающего входа по ключу, запретим вход по паролю — так мы избавимся от недостатков парольной аутентификации и получим все преимущества аутентификации по ключу. Отредактируем на сервере конфигурационный файл SSH /etc/ssh/sshd_config.

Убедитесь, что вход по ключам действительно работает, прежде чем отключать пароль. Иначе доступ к серверу получится восстановить только через KVM-консоль или в Rescue Mode.

Изменим параметр PasswordAuthentication — его значение должно стать no. Убедимся, что также отключена опция ChallengeResponseAuthentication, которая отвечает за устаревшую аутентификацию keyboard-interactive. Чтобы изменения вступили в силу, перезапустим службу SSH:

sudo systemctl restart ssh

Сервер перестанет принимать пароль после перезагрузки. Теперь вход — только по ключам.

При создании пары ключей утилитой ssh-keygen, если не менялся путь, предложенный по умолчанию, они сохраняются в каталоге ~/.ssh:
  • id_rsa или id_ed25519 — приватный ключ (название по умолчанию зависит от применявшегося алгоритма);
  • id_rsa.pub или id_ed25519.pub — публичный ключ.

Эти файлы рекомендуется защищать от несанкционированного доступа. Каталог ~/.ssh должен иметь права 700, а приватный ключ — 600 (только владелец может читать и записывать). Если права доступа настроены неверно, сервер SSH может отказать во входе по ключу из соображений безопасности.

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

Чтобы не вводить парольную фразу каждый раз, можно воспользоваться утилитой ssh-agent — ввод passphrase потребуется только одноразово за сессию:

ssh-add ~/.ssh/my_key

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

Ни на что не намекаю, но…


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

Все добавленные секреты хранятся в зашифрованном виде с использованием стойких алгоритмов, таких как AES-256-GCM. Доступ к хранилищу имеет только авторизованный пользователь — владелец аккаунта. Обмен данных с хранилищем шифруется по протоколу TLS, что предотвращает их перехват при использовании API или веб-интерфейса. Таким образом, приватный SSH-ключ, помещенный в менеджер, лежит в зашифрованном виде и защищен на уровне инфраструктуры.

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

Все операции с секретами логируются — для аудита доступна вся история действий, что повышает контроль и отслеживаемость. Можно увидеть, кто и когда извлекал или изменял ключ. Доступ к самой панели Selectel защищен как минимум паролем, а при включении 2FA — еще и одноразовыми кодами, что также рекомендуется.

Работа с хранилищем возможна через веб-интерфейс панели, через API или с помощью Terraform-провайдера. Это означает, что есть способ автоматически подключать секреты в пользовательские приложения и инфраструктурные сценарии. Например, вместо хранения SSH-ключа в скриптах CI/CD, его лучше запросить из менеджера секретов через API во время развертывания — ключ передается в зашифрованном виде и сразу доступен для подключения. При этом ключ не хранится на диске разработчика или в репозитории — он всегда находится только в защищенном хранилище и в памяти приложений на момент использования.

Менеджер секретов может безопасно защищать самые разные данные: пароли, учетные данные СУБД, TLS-сертификаты, приватные ключи к ним и многое другое. Такая централизация управления всеми секретами проекта решает множество задач. Например, для подключения к серверу используется SSH-ключ, а к базе данных — пароль. И ключ, и пароль находятся в менеджере секретов. В результате администратор не держит критичные секреты на своем компьютере или в блокноте — они все в надежном хранилище.

Сервис менеджер секретов предоставляется бесплатно для клиентов Selectel. Это современный подход к управлению чувствительными данными, соответствующий рекомендациям безопасности:
  • не хранить пароли и ключи в открытом виде в коде,
  • минимизировать распространение секретов среди людей и систем,
  • контролировать доступ из единого центра.

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

Комментарии (41)


  1. vdudouyt
    10.06.2025 10:25

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

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

    В качестве небольшого умственного упражнения предлагаю читателю данного комментария угадать, в формате какого именно SSH-клиента обычно приходит приватный ключ, когда его отправляют вместо того, чтобы попросить публичный ключ и добавить его в свой authorized_keys.

    Спойлер: поздравляю, Вы угадали.


    1. David_Osipov
      10.06.2025 10:25

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

      А так, можно и стулом порезаться, и бумагой убиться, если желание будет.


      1. redfox0
        10.06.2025 10:25

        Пароль на приватный ssh-ключ можно не ставить (и чаще всего не ставят). Да и украсть его легко (вместе с файликом к каким серверам вы подключались).


  1. greenlittlefrog
    10.06.2025 10:25

    Какие-то выдуманные проблемы. Достаточно правильно настроить iptables + fail2ban.


  1. ildarz
    10.06.2025 10:25

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


  1. kkursor
    10.06.2025 10:25

    -всё, понял, ошибся-


    1. elpis_cablegateast
      10.06.2025 10:25

      я надеялся что статья про аппаратные ключи тк пользователи линуксов часто не могут ввести логин&пароль без ошибок особенно не видят пробелы до или после а поле ввода чаще не обрабатывает такие моменты от дураков тк линукс же - аппаратный ключ + pin прям решение всех таких проблем


  1. GADzillo
    10.06.2025 10:25

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

    1. Хороший пароль всегда с вами - в голове. Он не останется на другой машине, вне доступа или украденным (пока).

    2. При низком качестве соединения доступ к хранилищу секретов сам по себе может предоставлять отдельную боль, в если там ещё авторизация через SSO - то сильную. ssh и mosh дают возможность работать на 3G с любого подручного средства, на котором обычно нет своего ключа.

    3. Наличие у вас криптоключа не только позволят у вас его похитить или изъять но и является вещдоком, позволяющим "пристегнуть" вас к конкретной машине.

    4. Многие при сравнении ключей и паролей забывают упомянуть, что длящиеся брутфорсы производятся по паре логин-пароль, и количество логинов в базах ниже чем количество паролей. Уникальное имя пользователя снижает вероятность подбора, в сочетании с соблюдением прочих рекомендаций по настройке и защите ssh.


    1. redfox0
      10.06.2025 10:25

      Ещё про jump-сервера почему-то почти никогда не говорят. Возможно, для пэт-проектов это и правда излишне.


  1. Kahelman
    10.06.2025 10:25

    С SSH-ключами можно использовать одну пару ключей для доступа к разным своим серверам (либо сгенерировать отдельную пару для разных групп машин).

    Давайте про это по подробнее а потом про удовольствие настройки выбора ключа. Например надо с GitHub работать по ssh используя разные identities.

    Удачи….


    1. e-staver
      10.06.2025 10:25

      Если правильно понял Ваш вопрос, то вообще никаких проблем:
      ~/.ssh/config

      Host work
        HostName company.org
        User git
        IdentityFile ~/.ssh/id_work
      
      Host private
        HostName 192.168.1.2
        Port 2345
        User git
        IdentityFile ~/.ssh/id_my
      


      1. randomsimplenumber
        10.06.2025 10:25

        Особенно красиво становится, когда хостов штук 100.


        1. redfox0
          10.06.2025 10:25

          Поддерживается *:

          host www.local
              port 12200
              hostkeyalgorithms +ssh-rsa,ssh-dss
          
          host *.local
              user foxy
          
          host *
              user fox
          


  1. orekh
    10.06.2025 10:25

    Пароль длиной 8-10 символов можно относительно быстро подобрать. Это делается или перебором, или с помощью словаря, особенно если пароль распространенный. SSH-ключ же — это последовательность из сотен случайных символов, чаще всего длиной 2 048 или 4 096 бит. Длина и энтропия таких ключей на порядки превышают даже самые сложные пароли.

    Нельзя сравнить длину ключа RSA и пароля напрямую, так 2048 битный ключ RSA соответствует 112 битному паролю по сложности взлома, однако больше и не надо, так как время взлома - миллиарды лет (если не будет изобретено что-то способное сильно ослабить RSA). А вот 512-битный ключ RSA уже подбирали за 4 часа и 75 баксов.


  1. xitriy87
    10.06.2025 10:25

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


    1. Naves
      10.06.2025 10:25

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


  1. randomsimplenumber
    10.06.2025 10:25

    Ключ лучше пароля, да. Но реализация key management сделана через }|{ чуть более чем везде. Пока у вас 1 ключ и 1 сервер - просто замечательно. Если у вас 10 человек в команде , 100 ключей у каждого и 100 серверов - упсь.


    1. redfox0
      10.06.2025 10:25

      Пусть входят на сервер по доменному логину/паролю (почти не шутка).


      1. ptr128
        10.06.2025 10:25

        Kerberos


  1. Furriest
    10.06.2025 10:25

    "Обождите"(С), я правильно понимаю, что вы предлагаете хранить все свои ключи во внешнем сервисе, доступ к которому "защищен как минимум паролем"?

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

    Принимает ли рекламируемый сервис на себя ответственность за компрометацию хранимых ключей и ущерб пользователя вследствие этого? Или "в размере месячной абонплаты"? :)

    (Под капотом бесплатный passbolt, вероятно? :)


    1. oldzoomer
      10.06.2025 10:25

      Так рекламируется не сам сервис, а облако, включающую этот сервис как "бонус" к основной услуге (облачные инстансы, etc). Похожее есть у всех крупных и уважаемых провайдеров - как в РФ, так и за бугром.


  1. WASD1
    10.06.2025 10:25

    Сложные уникальные пароли трудно запоминать. Рекомендации безопасности требуют создавать длинные пароли, состоящие из случайных символов. Однако человек не может держать много несуразных строк в памяти. Как итог, в ход идут записи в открытом виде, которые хранятся в небезопасных местах, на виду у всех желающих. А еще их можно потерять.

    Selectel


    Если ваш системный администратор требует этого - немедленно отправьте его на курсы повышения квалификации.
    Если ИБ-специалист - выгоните его.



    Даже в гос.структурах, 8 лет как best practices длинные, легко запоминаемые пользователями, желательно с индивидуальными особенностями литерации пароли, без обязательного срока экспирации (NIST-2017 https://pages.nist.gov/800-63-3/sp800-63-3.html ).


    1. oldzoomer
      10.06.2025 10:25

      Если ваш системный администратор требует этого - немедленно отправьте его на курсы повышения квалификации.

      Если ИБ-специалист - выгоните его.

      Дак прикол в том, что это утверждение растиражировано во всех местах - начиная от блогов ИБ-компаний и АВ-лабораторий, через которые обычно рекламируют всякие менеджеры паролей (зачастую платные, и работающие по принципу LastPass - "всё загоняем в своё облако", которое зачастую в любом случае уязвимое по дефолту из за своей проприетарности), и заканчивая "бложиками для блондинок", статьи для которых пишут копирайтеры с минимальным опытом в айти, вроде эльдоблога (и его аналога от соседней сети магазинов электроники), и бложиков опсосов, вроде того же t2.

      Поэтому тут даже хорошие вузы не спасут - у нас NIST'ы обычно редко читают, по сравнению с ГОСТом, по очевидным причинам.


      1. WASD1
        10.06.2025 10:25

        Я всегда воспринимал NIST - как "на 5 лет впереди ГОСТ", по понятным причинам (но с безопасностью давно не соприкосался, не в курсе выпустили наши аналог или нет).

        Но вот эта устаревшая фигня со "сложными" паролями затянулась, мне неясно из-за чего (более soft-skills коллеги ещё в 2017 говорили, что из-за человеческой инертности).

        С моей точки зрения достаточно увидеть пароли пользователя: " - "колобок-1" "колобок-2"...."колобок-33" - чтобы понять, что пора что-то в консерватории менять.


  1. yellowmew
    10.06.2025 10:25

    всегда еще смущал в таких статьях фактор "кейлоггера" в минусах использования пароля

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

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


    1. xSVPx
      10.06.2025 10:25

      При нормальной организации нельзя.

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

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

      Для паролей такие решения есть, но по понятным причинам результат хуже.


  1. xSVPx
    10.06.2025 10:25

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

    Нормальное средство - это что-то аппаратное защищенное пином, имеющее монитор и возможность легкого ввода соответствующего пароля или ключа.

    И тут у паролей, пожалуй даже преимущество, их можно унифицированно вводить прикинувшись клавиатурой. А с ключами, подозреваю вас ждет куча заморочек (т.е. вряд ли можно сделать единое решение для всех клиентов).

    И нет, хранение онлайн, в каких-то базах или специальных программах - это не путь джедая. Нужно что-то, что не сольет ВСЕ ваши пароли при взломе машины. (понятно, что все набранные оно сольет, речь о ненабранных, их может быть и в сто раз больше. Тут у ключа было бы преимущество, если бы он был "в токене" и никогда его не покидал, но как сделать подобное универсальное поведение непонятно :()


    1. ki11j0y
      10.06.2025 10:25

      Недорогой fido2 токен. У меня рутокен mfa, использую и как авторизацию passkey на сайтах так и в ssh.


      1. xSVPx
        10.06.2025 10:25

        Их поди целая пачка понадобится...


      1. kvk-2019
        10.06.2025 10:25

        Добавлю, что Рутокен MFA может содержать только до 16 пар закрытый+открытый ключ (не берусь считать это серьёзным ограничением для всех), Yubikey Security Key - до 25 (тоже недорогой относительно, поскольку там только U2F/FIDO2 аутентификация реализована). На сайте Рутокен даже инструкция есть: https://dev.rutoken.ru/pages/viewpage.action?pageId=164200455 Наверно, не совсем Offtop будет, если кто подскажет: вот у меня на GitHub доступ по ssh может быть по основному и резервному аппаратному токену, переключение батником:

        @echo off
        setlocal
        set key=id_ecdsa_sk
        if exist %ssh_path%\%key% if exist %ssh_path%\%key%.pub if not exist %ssh_path%\%key%_1 if not exist %ssh_path%\%key%_1.pub if exist %ssh_path%\%key%_2 if exist %ssh_path%\%key%_2.pub (
            call :swap 2 1
            echo Set to Yubikey Security Key
            ping 127.0.0.1 -n 3 >nul
            echo 
            exit /b
        )
        if exist %ssh_path%\%key% if exist %ssh_path%\%key%.pub if not exist %ssh_path%\%key%_2 if not exist %ssh_path%\%key%_2.pub if exist %ssh_path%\%key%_1 if exist %ssh_path%\%key%_1.pub  (
            call :swap 1 2
            echo Set to Рутокен MFA
            exit /b
        )
        :swap
        ren %ssh_path%\%key% %key%_%2
        ren %ssh_path%\%key%.pub %key%_%2.pub
        ren %ssh_path%\%key%_%1 %key%
        ren %ssh_path%\%key%_%1.pub %key%.pub

        Что-то упустил в плане безопасности, например, или вполне рабочий вариант?


  1. Uporoty
    10.06.2025 10:25

    Не забываем еще простое правило: для каждого сервиса (сервера) - свой ключ.

    Вас сдаст Гитхаб: деанонимизация пользователей SSH-серверов / Хабр


  1. nwort
    10.06.2025 10:25

    Принцип работы SSH-ключей основан на асимметричном шифровании. Приватный ключ шифрует данные. Обратное преобразование может выполнить только связанный с ним публичный ключ. По названию ключей можно видеть и принципы обращения с ними.

    А Вы ничего не перепутали?


  1. ki11j0y
    10.06.2025 10:25

    Авторизация по ключу это ещё не все. Весьма легко настраивается по токену fido2, чуть сложнее с pkcs11, где 1 уровень это владение токеном а второй знание пинкода, надежнее вроде да, как ещё можно прикрыть ssh? По geoip. Я так же пользуюсь этим методом, через обратный прокси (haproxy) либо ufw/iptables. Второй мой способ это wstunnel без знания пути узнать что там есть ssh нереально, есть и минусы у такого метода.


  1. tuxi
    10.06.2025 10:25

    Недостатки пароля перечислены и спорить с тем списком глупо.
    Но почему так же тезисно не сформулированы недостатки ключей?
    Я вот имел неприятный опыт как минимум 2 раза: первый раз, когда приватный ключ был утерян и второй раз, когда я был в отпуске и надо было срочно зайти на сервер и починить кое что, а ключей с собой не было, был ноутбук, был корпоративный впн и я помнил пароли от остальных серверов. А вот именно тот который был нужен - там вход по паролю был отключен.


  1. mvv-rus
    10.06.2025 10:25

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

    Вообще-то решение этой задачи известно ещё с прошлого века - централизованная аутентификация: NIS, Netware Directory Service, домен Windows NT...


    1. randomsimplenumber
      10.06.2025 10:25

      домен Windows NT

      Внутре там всякие ключи и kerberos, а наружу торчит пароль с политикой безопасности.


      1. ptr128
        10.06.2025 10:25

        У нас ИБ такие политики на пароли накрутило, что я перешел на keytab со своим паролем


  1. RulenBagdasis
    10.06.2025 10:25

    У паролей есть несколько существенных недостатков

    Давайте же посмотри на них....

    Пароль можно подобрать перебором. Сложные уникальные пароли трудно запоминать. Один и тот же пароль на нескольких сервисах.

    Ээээ, но это всё не актуально при использовании менеджера паролей.

    Пароль можно выведать или перехватить на стороне клиента. Пароль — это секрет, известный пользователю, и который он вынужден вводить вручную. Его могут подсмотреть через плечо

    См. предыдущий пункт про менеджер паролей.

    украсть с помощью кейлоггера или вируса.

    Если у вас на ПК вирусы крадут пароли, то приватный ключ они свистнут ещё быстрее.

    В общем, не убедили. Особенно с учётом того, что сегодня приходится регистрироваться в 100500 сервисах и у человека, который решил организовывать доступ к серверам, менеджер паролей есть 146%. У вас что-то такое получилось:

    Как по мне, так доступ по ключу просто удобнее.


  1. l0ser140
    10.06.2025 10:25

    Ещё в ssh agent ключи можно грузить прямо из менеджера паролей.

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

    В ключах на диске мне всегда не нравилось что любая программа может воспользоваться ключом.


  1. ptr128
    10.06.2025 10:25

    Почему Kerberos обошли молчанием?


    1. ildarz
      10.06.2025 10:25

      Потому что тогда нельзя будет сказать, что с ключами секрет по сети не передается, а вот с паролями.. :)) А если серьезно - просто неоправданная сложность. Вот если у вас уже есть инфраструктура с керберосом, тогда почему бы и нет.