Вход на сервер по 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. После этого пароли от серверов держать в голове больше не нужно.