Как создать SSH-ключ (ssh-keygen) и настроить вход на сервер без пароля
Пользователю надоело каждый раз вводить длинный сложный пароль при подключении к серверу по SSH, либо требуется настроить автоматический деплой и скрипты резервного копирования без интерактивного запроса пароля.
Как устроена авторизация по SSH-ключам?
Вместо пароля используется пара криптографических ключей:
- Приватный ключ (Private key / `id_ed25519`): хранится строго на вашем компьютере в секрете (это ваш личный электронный паспорт).
- Публичный ключ (Public key / `id_ed25519.pub`): копируется на удаленный сервер в файл
~/.ssh/authorized_keys(это замок, который подходит только к вашему паспорту).
Шаг 1. Генерация пары ключей на вашем компьютере
Откройте терминал на своем локальном компьютере (Windows PowerShell, macOS или Linux) и выполните:
ssh-keygen -t ed25519 -C "my_laptop"- Терминал спросит: «Enter file in which to save the key» — нажмите
Enter(сохранить по умолчанию). - Далее спросит: «Enter passphrase» — нажмите
Enterдва раза (без кодовой фразы для мгновенного входа).
Шаг 2. Копирование публичного ключа на сервер (команда ssh-copy-id)
ssh-copy-id -p 22 username@IP_ВАШЕГО_СЕРВЕРАВведите пароль от сервера в последний раз. Утилита автоматически создаст нужные папки и добавит ваш ключ на сервер.
Шаг 3. Вход без пароля!
Теперь просто подключитесь к серверу — вход произойдет мгновенно за доли секунды:
ssh username@IP_ВАШЕГО_СЕРВЕРА Частые вопросы (FAQ)
Что делать, если на компьютере с Windows нет утилиты ssh-copy-id?
В Windows PowerShell скопируйте ключ одной командой: type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@IP_СЕРВЕРА 'cat >> ~/.ssh/authorized_keys'.
Почему современный алгоритм Ed25519 лучше старого RSA?
Ключи Ed25519 короче, работают быстрее, обеспечивают более стойкую криптографию и не имеют уязвимостей, присущих старым 1024/2048-битным ключам RSA.
Какие права доступа должны быть у папки .ssh на сервере?
SSH очень строго относится к безопасности. На сервере права должны быть: chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys.
Как полностью запретить вход по паролям на сервере ради безопасности?
В файле /etc/ssh/sshd_config установите: PasswordAuthentication no, и перезапустите службу: sudo systemctl restart ssh.