Установка SSH-ключей в Debian 10
Debian, SSH | Комментировать запись
SSH, или secure shell – это зашифрованный протокол, используемый для безопасного подключения к серверу и управления ним. При работе с сервером Debian, вы, скорее всего, проведете большую часть времени в терминале, подключенном к серверу через SSH.
SSH-ключи обеспечивают простой и безопасный способ входа на сервер и рекомендуются для всех пользователей. В этом мануале вы узнаете, как настроить ключи SSH на новом сервере Debian 10.
1: Создание пары RSA-ключей
Для начала нужно создать пару ключей на клиентской машине (это ваш компьютер):
ssh-keygen
По умолчанию ssh-keygen создаст пару 2048-битных ключей RSA, для большинства случаев использования это достаточно надежные ключи (вы можете дополнительно передать флаг -b 4096, чтобы создать длинный 4096-битный ключ).
После ввода команды вы увидите следующий запрос:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Нажмите Enter, чтобы сохранить пару ключей в каталог .ssh/ в домашнем каталоге, или укажите другой путь.
Если вы сгенерировали пару ключей SSH ранее, вы можете увидеть запрос:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Важно! Если вы решите перезаписать ключ на диске, вы больше не сможете пройти аутентификацию с помощью предыдущего ключа. Будьте осторожны, выбирая yes, поскольку этот процесс нельзя отменить.
После этого вы увидите:
Enter passphrase (empty for no passphrase):
Здесь можно ввести сложную парольную фразу, которую настоятельно рекомендуется использовать. Она добавляет уровень безопасности для предотвращения входа в систему неавторизованных пользователей. Чтобы узнать больше о безопасности, ознакомьтесь с нашим мануалом Настройка аутентификации на основе SSH-ключей на сервере Linux.
Вы увидите такой вывод:
Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
Теперь у вас есть открытый и закрытый ключ, и их можно использовать для аутентификации. После этого нужно скопировать открытый ключ на сервер, чтобы затем настроить беспарольную аутентификацию на основе SSH-ключей.
2: Копирование открытого ключа на сервер
Самый быстрый способ скопировать открытый ключ на хост Debian –использовать утилиту ssh-copy-id. Этот метод очень прост, потому используйте эту утилиту, если у вас она есть. Если на вашем клиентском компьютере нет ssh-copy-id, вы можете использовать один из двух альтернативных методов, перечисленных в этом разделе ниже (копирование через парольную аутентификацию SSH или копирование ключа вручную).
Копирование ключа с помощью ssh-copy-id
Утилита ssh-copy-id включена по умолчанию во многие операционные системы, поэтому вы можете использовать ее в своей локальной системе. Чтобы этот метод работал, у вас уже должен быть парольный доступ SSH к серверу.
Чтобы использовать эту утилиту, нужно просто указать удаленный хост, к которому вы хотите подключиться, и учетную запись пользователя, к которой у вас есть SSH- доступ. На эту учетную запись будет скопирован ваш открытый ключ SSH.
Утилита использует такой синтаксис:
ssh-copy-id username@remote_host
Вы увидите такой вывод:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что ваш локальный компьютер не распознает удаленный хост. Это всегда происходит при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.
Затем утилита просканирует локальную учетную запись, чтобы найти ключ id_rsa.pub. Когда она найдет его, она предложит вам ввести пароль учетной записи удаленного пользователя:
/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
username@203.0.113.1's password:
Введите пароль (при этом ввод не будет отображаться из соображений безопасности) и нажмите Enter. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный пароль. Затем она скопирует содержимое файла ~/.ssh/id_rsa.pub в файл authorized_keys в домашнем каталоге ~/.ssh удаленной учетной записи.
Вы увидите вывод:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
На данный момент ваш ключ id_rsa.pub скопирован в удаленную учетную запись. Переходите к разделу 3.
Копирование открытого ключа по SSH
Если у вас нет ssh-copy-id, но есть пароль SSH для доступа к учетной записи на сервере, вы можете загрузить свои ключи с помощью обычного подключения SSH.
Сделать это можно при помощи команды cat, которая читает содержимое файла открытого SSH-ключа на локальном компьютере, и конвейера, который передаст ключ через SSH-соединение. После этого нужно убедиться, что каталог ~/.ssh существует в удаленной учетной записи, а затем проверить его содержимое.
Используйте символ перенаправления >>, чтобы добавить данные в файл, а не перезаписывать файл. Это позволит вам добавлять в файл ключи, не удаляя ранее добавленные данные.
Команда выглядит так:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Вы можете увидеть такое сообщение:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что ваш локальный компьютер не распознает удаленный хост. Это происходит при первом подключении к новому хосту. Введите yes и нажмите Enter, чтобы продолжить.
Затем будет предложено ввести пароль учетной записи удаленного пользователя:
username@203.0.113.1's password:
После ввода пароля содержимое ключа id_rsa.pub будет скопировано в конец файла authorized_keys удаленного пользователя. Если все получилось, переходите к разделу 3.
Копирование открытого ключа вручную
Если у вас нет парольного доступа, вам придется выполнить весь описанный выше процесс вручную.
Вам нужно будет вручную вставить содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на удаленной машине.
Чтобы отобразить содержимое id_rsa.pub, на локальной машине введите:
cat ~/.ssh/id_rsa.pub
Вы увидите такой ключ:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Любым доступным способом подключитесь к вашему удаленному хосту.
Затем убедитесь, что каталог ~/.ssh существует. Эта команда при необходимости создаст каталог (и не сделает ничего, если он уже существует):
mkdir -p ~/.ssh
Теперь в этом каталоге вы можете создать или изменить файл authorized_keys. Вы можете добавить содержимое id_rsa.pub в конец файла authorized_keys с помощью этой команды:
echo public_key_string >> ~/.ssh/authorized_keys
Если файл authorized_keys не существует, команда его создаст.
В приведенной выше команде замените public_key_string выводом команды cat ~/.ssh/id_rsa.pub в локальной системе. Он должен начинаться с ssh-rsa AAAA ….
Теперь нужно убедиться, что каталог ~/.ssh и файл authorized_keys имеют необходимые права доступа.
chmod -R go= ~/.ssh
Это заблокирует доступ к каталогу ~/.ssh/ для всех групп и других пользователей.
Если вы используете root-пользователя для настройки ключей другого пользователя, важно, чтобы каталог ~/.ssh принадлежал целевому пользователю, а не root:
chown -R 8host:8host ~/.ssh
Теперь можно проверить, как работает беспарольная аутентификация на сервере Debian.
3: Аутентификация по SSH-ключам
Скопировав открытый ключ на сервер, вы сможете войти на удаленный хост без пароля удаленного пользователя.
Введите команду:
ssh username@remote_host
Если вы впервые подключаетесь к этому хосту (например, если вы копировали ключ вручную), вы можете увидеть такое предупреждение:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это значит, что ваш локальный компьютер не распознает удаленный хост. Введите yes и нажмите Enter.
Если вы не установили парольную фразу для закрытого ключа, вы сразу же попадете в систему. Если вы создали парольную фразу, сейчас вам будет предложено ввести ее (обратите внимание, вводимая вами фраза не будет отображаться в терминале из соображений безопасности). После аутентификации вы получите доступ к удаленному пользователю.
Если аутентификация по ключам прошла успешно, можно отключить парольную аутентификацию, чтобы повысить безопасность удаленной машины.
4: Отключение парольной аутентификации
Если вы смогли войти в свою учетную запись без пароля, с помощью только SSH-ключей, вам лучше бы отключить механизм парольной аутентификации, чтобы защитить сервер от brute-force атак.
Важно! Прежде чем выполнять этот раздел, убедитесь, что на этом сервере вы настроили аутентификацию на основе SSH-ключей для учетной записи root или для пользователя с привилегиями sudo. Эти действия отключат поддержку паролей для входа в систему, и вы можете случайно заблокировать себя на собственном сервере.
Убедившись, что ваша удаленная учетная запись имеет необходимые привилегии, войдите на свой удаленный сервер с помощью SSH-ключей (либо с правами администратора, либо через пользователя с привилегиями sudo). Затем откройте файл конфигурации демона SSH:
sudo nano /etc/ssh/sshd_config
Внутри файла найдите директиву PasswordAuthentication. Она может быть закомментирована. Раскомментируйте эту строку и установите значение «no». Это отключит возможность входа в систему через SSH с использованием паролей учетных записей:
...
PasswordAuthentication no
...
Сохраните и закройте файл. Чтобы обновить настройки, необходимо перезапустить сервис sshd:
sudo systemctl restart ssh
В качестве меры предосторожности откройте новое окно и проверьте работу сервиса SSH:
ssh username@remote_host
После того как вы подтвердили работу сервиса SSH, можете закрыть все текущие сеансы сервера.
Теперь демон SSH на сервере Debian поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.
Заключение
Теперь на вашем сервере настроена аутентификация на основе SSH-ключей, позволяющая войти в систему без пароля от учетной записи.
Читайте также:
- Устранение неполадок SSH: как и когда искать ошибки?
- Тонкая настройка демона SSH на Linux VPS
- Основы шифрования и соединения SSH