Аутентификация по паролю-это метод по умолчанию, используемый большинством клиентов SSH (Secure Shell) для аутентификации на удаленных серверах, но он страдает от потенциальных уязвимостей безопасности, таких как попытки входа в систему методом перебора. Альтернативой аутентификации по паролю является аутентификация по открытому ключу с помощью SSH, при которой вы генерируете и сохраняете на своем компьютере пару криптографических ключей, а затем настраиваете сервер на распознавание и принятие ваших ключей. Использование аутентификации на основе ключей дает ряд преимуществ:
- Вход на основе ключа не является основной целью для хакерских атак методом перебора.
- Если сервер, использующий ключи SSH, скомпрометирован хакером, никакие учетные данные для авторизации не могут быть раскрыты.
- Поскольку пароль не требуется при входе в систему, вы можете войти на серверы из скриптов или средств автоматизации, которые необходимо запускать без присмотра. Например, вы можете настроить периодические обновления для своих серверов с помощью инструмента управления конфигурацией, и вы можете запускать эти обновления без физического присутствия.
В этом руководстве объясняется, как работает схема входа в систему с ключом SSH, как создать ключ SSH и как использовать эти ключи.
Как работают открытые ключи SSH
Ключи SSH генерируются парами и хранятся в текстовых файлах. Пара ключей (или ключевая пара) состоит из двух частей:
Закрытый ключ, обычно именованный id_rsa. Закрытый ключ хранится на локальном компьютере и должен храниться в безопасности с разрешениями, установленными таким образом, чтобы другие пользователи на вашем компьютере не могли прочитать файл.
Внимание Не делитесь своим закрытым ключом с другими.
- Открытый ключ, обычно именованный id_rsa.pub. Открытый ключ размещается на сервере, на который вы собираетесь войти. Вы можете свободно делиться своим открытым ключом с другими. Если кто-то другой добавит ваш открытый ключ на свой сервер, вы сможете войти на этот сервер.
Когда сайт или служба запрашивают ваш ключ SSH, они ссылаются на ваш открытый ключ SSH (id_rsa.pub). Например, такие сервисы, как GitHub и Gitlab, позволяют размещать открытый ключ SSH на своих серверах, чтобы упростить процесс передачи изменений кода в удаленные репозитории.
Как работает аутентификация с открытым ключом SSH?
В предыдущем разделе мы видели, что у нас есть открытый ключ и закрытый ключ. Мы понимаем, что они играют важную роль в обеспечении безопасного доступа. Но как? Лучший способ понять их-понять, что следующие компоненты в этой системе аутентификации математически связаны друг с другом:
- Открытый ключ
- Закрытый ключ
- Алгоритм аутентификации
Если вы используете свой открытый ключ для шифрования чего-либо, то только ваш закрытый ключ может его расшифровать. Аналогично, как только вы зашифруете что-то с помощью своего закрытого ключа, оно может быть расшифровано только вашим открытым ключом. И чтобы обеспечить безопасный доступ между серверами/машинами, мы делимся нашим открытым ключом с другой машиной, чтобы обеспечить безопасный доступ.
Но для выполнения этого шифрования и дешифрования существует алгоритм, который работает в фоновом режиме и обеспечивает безопасность SSH. Вот как это работает:
- Подписанное сообщение: любое сообщение, которое выходит, подписывается с использованием ваших закрытых ключей.
- Проверка связи: на вашем сервере хранится открытый ключ отправителя. Подписанное сообщение проверяется с помощью этого открытого ключа для расшифровки сообщения.
Когда мы подписываем сообщение, мы позволяем другим расшифровать его. Но когда получатель расшифровывает это сообщение, он может безопасно и надежно подтвердить, что сообщение действительно от вас. Для сопоставления этих ключей и проверки мы используем алгоритм Диффи-Хеллмана.
Чтобы сервер распознал и принял пару ключей, необходимо загрузить открытый ключ на сервер. Более конкретно, вы должны загрузить свой открытый ключ в домашний каталог пользователя, с которым вы хотите войти в систему. Если вы хотите войти в систему более чем одному пользователю на сервере, используя свою пару ключей, вы должны добавить свой открытый ключ каждому из этих пользователей.
Чтобы настроить аутентификацию с открытым ключом для одного из пользователей сервера, добавьте свой открытый ключ в новую строку внутри файла пользователя.authorized_keys Этот файл хранится в каталоге с именем .ssh/домашней папки пользователя. Файл пользователя authorized_keys может хранить более одного открытого ключа, и каждый открытый ключ указан в отдельной строке. Если ваш файл содержит более одного открытого ключа, то владелец каждого из перечисленных ключей может войти в систему как этот пользователь.
Предоставление кому-либо другому доступа к вашему серверу
Чтобы предоставить кому-либо доступ к пользователю вашего сервера, просто добавьте его открытый ключ в новую строку вашего authorized_keys файла, как вы бы добавили свой собственный. Чтобы отменить доступ для этого человека, удалите ту же строку и сохраните изменения.
Вызов-ответ
При входе на сервер с использованием SSH, если этот сервер имеет открытый ключ в файле, сервер создает препятствие(Проверка подлинности Challenge–response). Эта задача построена таким образом, что только владелец закрытого ключа SSH может расшифровать его.
Это действие вызов-ответ происходит без какого-либо взаимодействия с пользователем. Если человек, пытающийся войти в систему, имеет соответствующий закрытый ключ, он может безопасно войти в систему. Если нет, вход в систему либо завершается неудачно, либо возвращается к схеме аутентификации на основе пароля.
Парольные фразы закрытого ключа SSH
Вы можете дополнительно обеспечить дополнительный уровень безопасности для своего закрытого ключа SSH, зашифровав его локально с помощью парольной фразы во время создания. При попытке входа в систему с использованием зашифрованного ключа SSH вам будет предложено ввести его парольную фразу. Это не следует путать с паролем, так как эта ключевая фраза расшифровывает файл ключа только локально. Парольная фраза не передается через Интернет, как пароль.
Если вы хотите настроить свои логины так, чтобы они не требовали ввода пользователем, создание парольной фразы может быть нежелательным. Тем не менее, настоятельно рекомендуется использовать парольную фразу для защиты вашего закрытого ключа.
Да, безопасно делиться своим открытым ключом SSH с другими. Открытые ключи обычно хранятся как id_rsa.pub используемые для входа на другие серверы. Если у кого-то еще есть ваши открытые ключи SSH на их сервере, и они добавляют их, вы можете войти на их серверы.
Внимание Не путайте закрытые ключи SSH с открытыми ключами SSH. Закрытые ключи SSH должны храниться в безопасности, в отличие от открытых ключей SSH.
Насколько безопасна аутентификация по ключу SSH?
Аутентификация ключа SSH очень безопасна. В дополнение к безопасной удаленной аутентификации, он также обеспечивает способность противостоять атакам грубой силы. Как правило, пароли, отправленные по любой сети, могут быть уязвимы для этих атак методом перебора. При аутентификации по ключу SSH обмен подписанными сообщениями осуществляется с использованием ключей SSH длиной до 4096 бит, что эквивалентно паролю из 20 символов.
Ключи SSH генерируются машиной, а не человеком. Оказалось, что склонность человека к определенным строкам и числам увеличивает уязвимость в защищенных системах в отличие от машинных ключей.
Что делает SSH еще более безопасным, так это тот факт, что вы можете легко добавить парольную фразу поверх аутентификации ключа SSH. Это также обычно называют многофакторной аутентификацией или MFA.