Как настроить аутентификацию на основе ключей SSH в Linux
В этом руководстве представлен обзор различных методов аутентификации SSH с особым упором на аутентификацию на основе ключей SSH. Кроме того, в этом руководстве вы узнаете, как настроить аутентификацию на основе ключей SSH в Linux и Unix-подобных операционных системах.
В этом пошаговом руководстве рассматриваются следующие темы:
- Типы методов аутентификации SSH,
- Обзор метода аутентификации на основе ключей SSH,
- Преимущества метода аутентификации на основе ключей,
- Генерация пары ключей,
- Скопируйте открытый ключ на SSH-сервер,
- Отключить аутентификацию на основе пароля,
- Проверка аутентификации пароля SSH,
- И, наконец, добавьте новых клиентов на SSH-сервер.
Типы методов аутентификации SSH
Secure Shell, сокращенно SSH, — это криптографический сетевой протокол, который позволяет безопасно обмениваться данными и получать доступ к удаленной системе через незащищенную сеть, например Интернет.
Всякий раз, когда вы отправляете данные по незащищенной сети с использованием SSH, данные автоматически шифруются в исходной системе и расшифровываются на стороне назначения.
SSH предоставляет четыре метода аутентификации, а именно: аутентификация на основе пароля, аутентификация на основе ключей, аутентификация на основе хоста и аутентификация с помощью клавиатуры..
Наиболее часто используемые методы аутентификации — это методы аутентификации на основе пароля и на основе ключа.
При аутентификации на основе пароля все, что вам нужно, — это пароль пользователя удаленной системы. Если вы знаете пароль удаленного пользователя, вы можете получить доступ к соответствующей системе с помощью команды "ssh user@remote-system-ip" .
С другой стороны, при аутентификации на основе ключей вам необходимо сгенерировать пары ключей SSH и загрузить открытый ключ SSH в удаленную систему, чтобы передать его через SSH.
Каждая пара ключей SSH состоит из закрытого и открытого ключей. Закрытый ключ должен храниться в клиентской системе, а открытый ключ должен быть загружен в удаленные системы. Вы не должны никому раскрывать закрытый ключ.
Что такое аутентификация на основе ключей SSH?
Аутентификация на основе ключей SSH – это метод аутентификации пользователя на SSH-сервере с использованием пары криптографических ключей. Ключи генерируются с помощью генератора пар ключей, например команды ssh-keygen
. Закрытый ключ хранится пользователем в секрете, а открытый ключ передается SSH-серверу.
Когда пользователь пытается подключиться к SSH-серверу, сервер сначала сверяет открытый ключ пользователя со списком авторизованных ключей. Если открытый ключ найден, сервер предложит пользователю предоставить соответствующий закрытый ключ. Если пользователь сможет успешно предоставить закрытый ключ, он будет аутентифицирован и ему будет предоставлен доступ к SSH-серверу.
Аутентификация на основе ключей SSH считается более безопасной, чем аутентификация на основе пароля, поскольку она не зависит от паролей, которые можно легко угадать или украсть. Кроме того, аутентификация на основе ключей SSH может использоваться для автоматизации входа в систему, что может быть полезно для таких задач, как запуск сценариев или передача файлов.
Аутентификация на основе ключей — наиболее безопасный тип аутентификации SSH. Однако ее настроить и использовать может быть сложнее, чем аутентификацию на основе пароля или интерактивную клавиатуру.
Вот шаги по настройке аутентификации на основе ключей SSH:
- Создайте пару ключей на своем компьютере с помощью команды ssh-keygen.
- Скопируйте открытый ключ в файл авторизованных ключей SSH-сервера.
- Отключите аутентификацию на основе пароля на SSH-сервере.
- После настройки аутентификации на основе ключей SSH вы можете подключиться к SSH-серверу без необходимости ввода пароля.
Преимущества аутентификации на основе ключей
Вот некоторые преимущества аутентификации на основе ключей SSH:
- Повышенная безопасность. Аутентификация на основе ключей SSH значительно более безопасна, чем аутентификация на основе пароля. Он устойчив к атакам методом грубой силы, и его вряд ли удастся угадать или взломать.
- Защита от кражи паролей. Поскольку пароли не используются, риск того, что кто-то перехватит и украдет ваш пароль во время процесса аутентификации, отсутствует.
- Пары ключей для пользователя и сервера. Пары ключей SSH состоят из открытого и закрытого ключей. Открытый ключ размещается на сервере, а закрытый ключ хранится на клиентском компьютере. Такое разделение добавляет дополнительный уровень безопасности, поскольку закрытый ключ никогда не покидает ваше устройство.
- Удобство. После настройки аутентификация на основе ключей SSH позволяет вам входить в систему без необходимости запоминать или вводить пароли. Это особенно полезно для частых входов в систему или задач автоматизации.
- Автоматизация и сценарии. Аутентификация на основе ключей SSH широко используется в автоматизации и написании сценариев, поскольку позволяет процессам безопасно подключаться к удаленным серверам без ручного ввода пароля.
- Поддержка многофакторной аутентификации (MFA): аутентификацию на основе ключей SSH можно использовать в сочетании с MFA, обеспечивая дополнительный уровень безопасности за счет требования второго фактора аутентификации (например, парольной фразы или аппаратного токена). ) в дополнение к ключу.
- Отзыв и управление ключами. Если закрытый ключ скомпрометирован или его необходимо отозвать по какой-либо причине, вы можете просто удалить соответствующий открытый ключ из списка авторизованных ключей на сервере. Такой непосредственный контроль над доступом является преимуществом.
- Аудит и подотчетность. Аутентификация на основе ключей SSH обеспечивает четкий контрольный журнал того, кто обращался к серверу, поскольку доступ каждого пользователя привязан к его уникальному ключу. Это может быть полезно для мониторинга соответствия и безопасности.
- Совместимость. Аутентификация на основе ключей SSH широко поддерживается в различных операционных системах и клиентах SSH, что делает ее универсальным и кроссплатформенным решением.
- Уменьшение необходимости использования паролей. Пользователям не нужно запоминать или управлять сложными паролями для нескольких серверов, что снижает риск использования слабых или повторно используемых паролей.
- Большая длина ключей. В парах ключей SSH используются более длинные криптографические ключи по сравнению с обычными паролями, что делает их более устойчивыми к атакам.
Таким образом, аутентификация на основе ключей SSH предлагает сочетание высокой безопасности и удобства, что делает ее предпочтительным выбором для защиты удаленного доступа к серверам и системам.
Надеюсь, вы получили общее представление о SSH и его методах аутентификации. Теперь давайте перейдем к пошаговой настройке аутентификации на основе ключей SSH в Linux.
Настройка аутентификации на основе ключей SSH в Linux
Для целей данного руководства я буду использовать две системы Debian Linux. Debian 11 с IP-адресом 192.168.1.101 является локальной системой, а сервер Debian 12 с IP-адресом 192.168.1.20 действует как удаленная система, то есть ssh-сервер.
Детали локальной системы:
- ОС: Debian 11 Cinnamon Desktop.
- IP-адрес: 192.168.1.101/24
Сведения об удаленной системе (SSH-сервере):
- ОС: сервер Debian 12.
- IP-адрес: 192.168.1.20/24
Шаг 1. Создайте пару ключей SSH в локальной системе.
Как уже говорилось, при использовании метода аутентификации на основе ключей SSH открытый ключ должен быть загружен в удаленную систему, к которой вы хотите получить доступ через SSH. Открытые ключи обычно хранятся в файле с именем ~/.ssh/authorized_keys в удаленных системах SSH.
Важное примечание: Не создавайте пары ключей от имени root, так как только root сможет их использовать. ключи. Создайте пары ключей как обычный пользователь.
Теперь давайте создадим пару ключей SSH в локальной системе. Для этого выполните следующую команду в вашей локальной клиентской системе.
ssh-keygen
Приведенная выше команда создаст пару ключей RSA длиной 3072 бита. Введите парольную фразу дважды. Что еще более важно, запомните свою парольную фразу. Он понадобится вам позже.
Пример вывода:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ostechnix/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ostechnix/.ssh/id_rsa
Your public key has been saved in /home/ostechnix/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ostechnix@pvedebian
The key's randomart image is:
+---[RSA 3072]----+
| Bo..o..o.o |
|* =.o.o o . |
|.+ + o+.. |
|..o =.E+ |
|oX + .. S |
|O * o |
|++ = |
|.oX |
|*=o+ |
+----[SHA256]-----+
Создать пару ключей SSH
Если вы уже создали пару ключей, вы увидите следующее сообщение. Просто введите "y", чтобы перезаписать существующий ключ.
/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?y
Примечание:
Помните, что предоставление парольной фразы не является обязательным. Если вы его дадите, вам будет предложено ввести пароль каждый раз, когда вы попытаетесь подключиться по SSH к удаленной системе, если только вы не используете какой-либо агент SSH для хранения пароля.
Если вам не нужна парольная фраза (хотя это небезопасно), просто дважды нажмите клавишу ENTER, когда вам будет предложено ввести парольную фразу. Тем не менее, я рекомендую вам использовать парольную фразу.
Использование ssh-ключа без пароля, как правило, не является хорошей идеей с точки зрения безопасности. Их следует ограничить очень специфическими случаями, такими как службы, которым требуется доступ к удаленной системе без вмешательства пользователя (например, удаленное резервное копирование с помощью rsync, unison, …).
Если у вас уже есть ключ SSH без парольной фразы в личном файле ~/.ssh/id_rsa
и вы хотите обновить ключ с помощью парольной фразы, используйте следующую команду:
ssh-keygen -p -f ~/.ssh/id_rsa
Пример вывода:
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
Шаг 2. Скопируйте открытый ключ SSH на сервер SSH (удаленная система).
Мы создали пару ключей в локальной системе. Затем скопируйте открытый ключ SSH на удаленный SSH-сервер с помощью команды:
ssh-copy-id ostechnix@192.168.1.20
Здесь я буду копировать открытый ключ локальной системы (Debian 11 Desktop) в удаленную систему (в моем случае Debian 12 Server).
Технически говоря, приведенная выше команда скопирует содержимое ключа ~/.ssh/id_rsa.pub
локальной системы в ~/.ssh/ удаленной системы. авторизованный_ключи
. Прозрачный? Хороший.
Введите yes, чтобы продолжить подключение к удаленному SSH-серверу, а затем введите пароль sudo (или пароль пользователя root) удаленной системы.
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ostechnix@192.168.1.20's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ostechnix@192.168.1.20'"
and check to make sure that only the key(s) you wanted were added.
Скопируйте открытый ключ SSH на SSH-сервер
Если вы уже скопировали ключ, но хотите обновить ключ новой парольной фразой, используйте опцию -f, чтобы перезаписать существующий ключ, как показано ниже.
ssh-copy-id -f ostechnix@192.168.1.20
Мы успешно добавили открытый ключ SSH локальной системы в удаленную систему.
Теперь мы можем полностью отключить аутентификацию на основе пароля в удаленной системе. Потому что мы уже настроили аутентификацию на основе ключей, поэтому аутентификация на основе пароля нам больше не нужна.
Шаг 3. Отключите аутентификацию на основе пароля SSH на удаленном сервере SSH
Вам необходимо выполнить следующие команды от имени пользователя root
или sudo
.
Чтобы отключить аутентификацию на основе пароля, перейдите в консоль удаленной системы и отредактируйте файл конфигурации /etc/ssh/sshd_config
в любом редакторе:
sudo nano /etc/ssh/sshd_config
Найдите следующую строку. Раскомментируйте его и установите значение нет.
PasswordAuthentication no
Отключить аутентификацию на основе пароля SSH
Перезапустите службу sshd
, чтобы изменения вступили в силу.
sudo systemctl restart sshd
Шаг 4. Проверка аутентификации на основе ключей SSH
Чтобы проверить, правильно ли вы настроили аутентификацию на основе ключей, вам необходимо получить доступ к удаленной системе из локальной системы через SSH.
Перейдите в свою локальную систему и подключитесь по SSH к удаленному серверу, используя команду:
ssh ostechnix@192.168.1.20
Вам будет предложено ввести парольную фразу для входа в удаленную систему ssh. Введите пароль для ключа и нажмите клавишу ВВОД.
Тестирование аутентификации на основе ключей SSH
Если вы попытаетесь получить доступ к удаленной системе из системы только с интерфейсом командной строки, вы увидите следующий вывод:
Enter passphrase for key '/home/sk/.ssh/id_rsa':
Last login: Thu Sep 7 14:12:11 2023 from 192.168.1.101
ostechnix@debian12:~$
Как вы заметили, мы вошли в учетную запись удаленной системы, используя парольную фразу, которую мы создали ранее с помощью команды ssh-keygen, а не фактический пароль учетной записи удаленного пользователя.
Если вы попытаетесь подключиться по SSH из другой клиентской системы, вы получите это сообщение об ошибке. Скажем, например, я попытался подключиться по SSH к своему серверу Debian 12 из одной из систем Ubuntu, используя команду:
ssh sk@192.168.1.20
Пример вывода:
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts.
Permission denied (publickey).
Как вы видите в приведенном выше выводе, я не могу подключиться по SSH к своему удаленному SSH-серверу из других систем.
Шаг 5. Добавление ключей новой клиентской системы на SSH-сервер
Это очень важно. Как я уже говорил, вы не можете получить доступ к удаленной системе через SSH, кроме той, которую вы настроили (в нашем случае это Debian 11 Desktop).
Я хочу предоставить разрешения большему количеству клиентов на доступ к удаленному SSH-серверу. Что я должен делать? Простой. Вам необходимо сгенерировать пару ключей SSH во всех ваших клиентских системах и вручную скопировать открытый ключ ssh на удаленный сервер, к которому вы хотите получить доступ через SSH.
Чтобы создать пару ключей SSH в ваших клиентских системах, запустите:
ssh-keygen
Введите парольную фразу дважды. После создания пары ключей скопируйте открытый ключ ssh (не закрытый ключ) на удаленный сервер вручную.
Отобразите ключ публикации с помощью команды:
cat ~/.ssh/id_rsa.pub
Вы должны увидеть результат, подобный приведенному ниже.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@pvedebian
Скопируйте все содержимое (через USB-накопитель или любой другой носитель) и перейдите на консоль удаленного сервера. Создайте каталог с именем ssh в домашнем каталоге, как показано ниже.
mkdir -p ~/.ssh
Затем добавьте ключ публикации вашей клиентской системы, сгенерированный на предыдущем шаге, в файл с именем "~/.ssh/authorized_keys
":
echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
Перезапустите службу ssh в удаленной системе. Теперь вы сможете подключиться к своему серверу по SSH с нового клиента.
Если вручную добавить открытый ключ ssh кажется трудным, временно включите аутентификацию на основе пароля в удаленной системе и скопируйте ключ с помощью команды «ssh-copy-id
» из вашей локальной системы и, наконец, отключите аутентификацию на основе пароля. .
Часто задаваемые вопросы
Вот список наиболее часто задаваемых вопросов и ответов на них (FAQ) об аутентификации на основе ключей SSH.
Вопрос: Что такое аутентификация на основе ключей SSH?
О: Аутентификация на основе ключей SSH — это безопасный метод входа в удаленные системы или серверы по сети. Вместо использования пароля он использует пару криптографических ключей — открытый ключ и закрытый ключ — для проверки вашей личности.
Вопрос: Как работает аутентификация на основе ключей SSH?
О: Аутентификация на основе ключей SSH работает путем создания уникальной пары ключей. Открытый ключ размещается на удаленном сервере, а закрытый ключ надежно хранится на вашем локальном компьютере. Когда вы подключаетесь к серверу, он проверяет, соответствует ли ваш закрытый ключ открытому ключу, хранящемуся на сервере. Если они совпадают, вы получаете доступ без необходимости пароля.
Вопрос: Каковы преимущества аутентификации на основе ключей SSH?
О: Вот список важных функций.
- Повышенная безопасность: ключи SSH взломать значительно сложнее, чем пароли, что делает его более безопасным методом аутентификации.
- Удобство. : После настройки вы можете входить в систему, не вводя каждый раз пароль.
- Автоматизация: ключи SSH обычно используются для автоматизированных процессов, таких как связь между серверами или выполнение сценария без вмешательства пользователя.
- Уменьшение раскрытия паролей: Поскольку вы не вводите пароли, риск перехвата паролей во время входа в систему отсутствует.
Вопрос: Как создать ключи SSH?
О: Вы можете сгенерировать ключи SSH с помощью команды ssh-keygen
на своем локальном компьютере. Он создаст пару ключей — один публичный и один приватный. Обычно вы найдете их в каталоге .ssh
вашего пользователя.
Вопрос: Могу ли я использовать одну и ту же пару ключей SSH на нескольких серверах?
О: Да, вы можете использовать одну и ту же пару ключей SSH для доступа к нескольким серверам. Однако считается более безопасным иметь уникальную пару ключей для каждого сервера.
Вопрос: Как настроить аутентификацию на основе ключей SSH на удаленном сервере?
О: Обычно вы добавляете свой открытый ключ в файл ~/.ssh/authorized_keys
на удаленном сервере. Это позволяет серверу распознавать ваш открытый ключ, когда вы пытаетесь подключиться с помощью вашего закрытого ключа.
Вопрос: Что произойдет, если я потеряю свой закрытый ключ?
О: Если вы потеряете свой закрытый ключ, вы не сможете использовать его для аутентификации. Вы можете создать новую пару ключей и обновить свои авторизованные ключи на серверах, к которым вам нужен доступ.
Вопрос: Совместима ли аутентификация на основе ключей SSH со всеми операционными системами и клиентами SSH?
О: Да, аутентификация на основе ключей SSH широко поддерживается и может использоваться с различными операционными системами (Linux, macOS, Windows с такими инструментами, как PuTTY) и SSH-клиентами.
Вопрос: Могут ли ключи SSH быть защищены паролем?
О: Да, вы можете добавить дополнительный уровень безопасности, защитив свой закрытый ключ паролем. Для этого необходимо вводить пароль каждый раз, когда вы используете закрытый ключ.
Вопрос: Подходит ли аутентификация на основе ключей SSH для всех случаев использования?
О: Хотя аутентификация на основе ключей SSH очень безопасна и удобна, она может подходить не для всех случаев использования. Например, это может быть менее практично для сценариев, включающих большое количество пользователей или временный доступ.
Связанное чтение:
- Как настроить многофакторную аутентификацию для SSH в Linux
- Определите, использует ли пользователь SSH-аутентификацию на основе пароля или ключа
- Как предотвратить атаки грубой силы SSH с помощью Fail2ban в Linux
- SSLH – используйте один и тот же порт для HTTPS и SSH
- ScanSSH — быстрый SSH-сервер и открытый прокси-сканер
Заключение
Аутентификация на основе ключей SSH обеспечивает дополнительный уровень защиты ваших серверов Linux от атак методом перебора. Как видите, настроить аутентификацию по ключам не так уж и сложно. Использование аутентификации на основе ключей — один из рекомендуемых методов обеспечения безопасности вашего Linux-сервера.