Ключи SSH в Ubuntu: Ed25519, ssh-copy-id и ~/.ssh/config

Ключи SSH в Ubuntu: Ed25519, ssh-copy-id и ~/.ssh/config

Вход на сервер по SSH-ключу удобнее и безопаснее пароля: сервер проверяет криптографическую пару, и подбор пароля перестаёт быть главной угрозой. В Ubuntu 26.04 стоит OpenSSH 10.2, в 24.04 версия 9.6, а сам проект OpenSSH 6 октября 2026 года выпустил версию 10.6. Ниже создание ключа, копирование на сервер, вход и короткие имена хостов в ~/.ssh/config.

Создание пары ключей Ed25519

В терминале на своей машине:

ssh-keygen -t ed25519 -C "email@example.com"

Ed25519 сейчас ключ по умолчанию: по man ssh-keygen, без аргументов команда создаёт именно его. Так стало с OpenSSH 9.5 (октябрь 2023 года), поэтому в Ubuntu 24.04 и 26.04 ключ -t можно и не писать (в 22.04 стоит OpenSSH 8.9, там по умолчанию ещё RSA). Ключи Ed25519 короткие, а поддерживает их OpenSSH с версии 6.5 2014 года.

Если нужно подключаться к очень старым системам без поддержки Ed25519, RSA тоже работает:

ssh-keygen -t rsa -b 4096 -C "email@example.com"

Путь по умолчанию ~/.ssh/id_ed25519 (или id_rsa), Enter его принимает. Парольная фраза защищает ключ на диске: без неё удобнее, но украденный файл сразу пускает на сервер.

Публичный ключ лежит в файле с расширением .pub, его можно спокойно отдавать на серверы. Приватный (id_ed25519 без .pub) никому не передавайте и не кладите в репозитории.

Копирование публичного ключа на сервер

Проще всего через ssh-copy-id. Для этого нужен разовый вход по паролю или уже настроенный доступ:

ssh-copy-id user@hostname

По man ssh-copy-id, утилита сначала пробует войти с каждым ключом и отправляет только те, которых на сервере ещё нет, а потом дописывает их в ~/.ssh/authorized_keys. Вручную то же самое делается так:

cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Вход по ключу и отключение паролей

ssh user@hostname

Если задавали парольную фразу, ssh спросит её или возьмёт уже разблокированный ключ из ssh-agent. Пароль от учётной записи на сервере больше не нужен.

Когда вход по ключу точно работает, на сервере стоит запретить вход по паролю директивой PasswordAuthentication no в sshd_config. В Ubuntu удобнее положить её отдельным файлом в /etc/ssh/sshd_config.d/, проверить конфиг и перезапустить службу:

echo 'PasswordAuthentication no' | sudo tee /etc/ssh/sshd_config.d/10-no-password.conf
sudo sshd -t && sudo systemctl restart ssh

Делайте это, только если есть запасной путь на сервер, например консоль в панели провайдера. И не закрывайте текущую сессию, пока не проверите вход из нового окна.

Короткие имена хостов в ~/.ssh/config

Чтобы не помнить адрес, логин и ключ, создайте или дополните ~/.ssh/config:

Host myserver
    HostName hostname
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Права на файл chmod 600 ~/.ssh/config. Дальше достаточно набрать:

ssh myserver

В том же файле задаются нестандартный порт, вход через промежуточный сервер (ProxyJump) и разные ключи для разных хостов. Все директивы описаны в man ssh_config.

Если нужен сервер, настроенный под ключ с самого начала, настройка VPS (Linux, Nginx, PHP, Docker, SSL, файрвол, бэкапы) у меня стоит от 10 000 ₽, подробности в прайс-листе.

В итоге хватает четырёх шагов: создать ключ Ed25519, отправить публичную часть через ssh-copy-id, проверить вход и отключить пароли, а для удобства завести алиасы в ~/.ssh/config. После этого пароли от серверов держать в голове больше не нужно.

Источники и ссылки


Комментарии загружаются…