Как настроить аутентификацию по SSH с использованием публичного ключа?

«Как настроить аутентификацию по SSH с использованием публичного ключа?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Настройка входа по SSH-ключу — стандартная практика для повышения безопасности и удобства. Я настраиваю это так:

1. Генерация ключевой пары на клиентской машине (если её нет):

# Использую алгоритм Ed25519 (рекомендуется) или RSA 4096
ssh-keygen -t ed25519 -C "your_email@example.com"
# Или
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Ключи по умолчанию сохраняются в ~/.ssh/id_ed25519 (приватный) и ~/.ssh/id_ed25519.pub (публичный).

2. Копирование публичного ключа на сервер: Самый простой способ — утилита ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip

Она автоматически добавит ключ в ~/.ssh/authorized_keys на сервере.

Если ssh-copy-id недоступна, делаю вручную:

# На клиенте выводим публичный ключ
cat ~/.ssh/id_ed25519.pub
# Копируем вывод, затем на сервере выполняем:
mkdir -p ~/.ssh
echo "<вставленный_публичный_ключ>" >> ~/.ssh/authorized_keys

3. Критически важный шаг — настройка прав доступа на сервере: Неправильные права могут привести к отказу в аутентификации.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh

4. (Опционально) Повышение безопасности сервера: Редактирую /etc/ssh/sshd_config и применяю изменения.

sudo nano /etc/ssh/sshd_config

Рекомендуемые параметры:

PubkeyAuthentication yes
PasswordAuthentication no  # Отключаем парольную аутентификацию
PermitRootLogin no         # Запрещаем вход root по SSH

После правок перезагружаю демон: sudo systemctl restart sshd.

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