Как создать SSH-ключ и подключаться к серверу без пароля
SSH-ключ — это пара файлов, которая заменяет пароль при входе на сервер. Закрытый ключ хранится только на вашем компьютере, открытый копируется на сервер. При подключении сервер проверяет, что у вас есть закрытый ключ, подходящий к открытому, — и пускает без пароля.
Почему ключ лучше пароля:
- Его невозможно подобрать. Боты круглосуточно перебирают пароли к SSH на всех серверах интернета. Ключ длиной в сотни бит перебором не взломать.
- Его нельзя подсмотреть или перехватить. Закрытый ключ никогда не передаётся по сети.
- Удобнее. Не нужно вводить пароль при каждом подключении, а с ssh-agent — даже парольную фразу ключа.
В инструкции создадим ключ в Linux, macOS и Windows, перенесём его на сервер, настроим быстрое подключение и отключим вход по паролю. Используем алгоритм Ed25519 — современный стандарт: короткие ключи, высокая скорость и надёжность.
Шаг 1. Создайте SSH-ключ в Linux и macOS
Откройте терминал на своём компьютере (не на сервере) и выполните:
ssh-keygen -t ed25519 -C "my-laptop"
-C — комментарий, чтобы потом понять, с какого устройства ключ. Укажите имя компьютера или email.
Программа задаст два вопроса:
- Куда сохранить ключ. Нажмите Enter — ключ сохранится в стандартное место
~/.ssh/id_ed25519. Если такой ключ уже есть, программа предложит перезаписать его: ответьтеn, иначе потеряете старый ключ и доступ к серверам с ним. - Парольная фраза (passphrase). Это пароль, которым шифруется сам ключ. Если ноутбук украдут, без фразы ключом не воспользуются. Рекомендуем её задать — вводить каждый раз не придётся, если настроить ssh-agent (о нём ниже).
В папке ~/.ssh появятся два файла:
id_ed25519— закрытый ключ. Никому его не отправляйте и не копируйте на серверы.id_ed25519.pub— открытый ключ. Его можно спокойно передавать: копировать на серверы, вставлять в панель хостинга, GitHub или GitLab.
Посмотреть открытый ключ:
cat ~/.ssh/id_ed25519.pub
Он выглядит как одна строка: ssh-ed25519 AAAAC3Nza... my-laptop.
Если сервер старый и не поддерживает Ed25519 (OpenSSH старше 2014 года), создайте RSA-ключ длиной 4096 бит: ssh-keygen -t rsa -b 4096 -C "my-laptop".
Как создать SSH-ключ в Windows
В Windows 10 и 11 уже встроен клиент OpenSSH, ставить PuTTY не нужно. Откройте PowerShell (правой кнопкой по «Пуск» → «Терминал») и выполните ту же команду:
ssh-keygen -t ed25519 -C "my-laptop"
Дальше всё как в Linux: Enter для стандартного места и парольная фраза. Ключи сохранятся в папку C:\Users\ИМЯ\.ssh.
Посмотреть открытый ключ в PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub
Если команда ssh-keygen не найдена, включите клиент OpenSSH: Параметры → Система → Дополнительные компоненты → Клиент OpenSSH.
Если пользуетесь PuTTY. PuTTY работает с ключами в своём формате .ppk. Создайте ключ в программе PuTTYgen (тип EdDSA, Ed25519) или загрузите в неё уже созданный ключ кнопкой Load и сохраните в .ppk. В PuTTY ключ указывается в Connection → SSH → Auth → Credentials.
Шаг 2. Скопируйте открытый ключ на сервер
Открытый ключ нужно добавить в файл ~/.ssh/authorized_keys на сервере — в домашней папке того пользователя, под которым вы будете входить. Выберите удобный способ.
Способ 1: ssh-copy-id (Linux и macOS). Самый простой вариант. Команда подключится к серверу по паролю и сама добавит ключ с правильными правами доступа:
ssh-copy-id user@IP_СЕРВЕРА
Вместо user укажите имя пользователя на сервере, например root на новом VPS.
Способ 2: PowerShell в Windows. В Windows нет ssh-copy-id, но то же самое делает одна команда:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@IP_СЕРВЕРА "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Способ 3: через панель хостинга. У большинства хостингов можно добавить открытый ключ в панели ещё при создании VPS. Тогда ключ сразу окажется на сервере, и пароль вообще не понадобится. Вставляйте содержимое файла .pub целиком, одной строкой.
Способ 4: вручную на сервере. Скопируйте открытый ключ в буфер обмена, зайдите на сервер по паролю и выполните:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ВАШ_ОТКРЫТЫЙ_КЛЮЧ" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Права доступа важны: если папка .ssh или файл authorized_keys доступны другим пользователям, SSH игнорирует ключ и снова спрашивает пароль.
Шаг 3. Подключитесь и настройте быстрый вход
Подключитесь к серверу:
ssh user@IP_СЕРВЕРА
Если всё настроено верно, сервер не спросит пароль пользователя. Может спросить только парольную фразу ключа — это нормально, она расшифровывает ключ на вашем компьютере.
Если ключ лежит не в стандартном месте, укажите его явно:
ssh -i ~/.ssh/my_server_key user@IP_СЕРВЕРА
Файл config: вход одним словом. Чтобы не вводить каждый раз логин, IP, порт и путь к ключу, сохраните их в файл ~/.ssh/config на своём компьютере (в Windows — C:\Users\ИМЯ\.ssh\config, без расширения). Откройте его в любом текстовом редакторе и добавьте:
Host myvps
HostName 203.0.113.10
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
Теперь для входа достаточно написать:
ssh myvps
Имя из строки Host работает и в других командах: например, scp file.zip myvps:~/ копирует файл на сервер. Для нескольких серверов добавьте несколько блоков Host, каждый со своим именем.
Шаг 4. Отключите вход по паролю
Пока вход по паролю включён, боты продолжают его подбирать. Когда вход по ключу работает, отключите пароли — это полностью закрывает подбор.
Не закрывайте текущую SSH-сессию, пока не проверите вход по ключу в новом окне терминала.
На сервере создайте файл настроек:
sudo nano /etc/ssh/sshd_config.d/01-hardening.conf
Добавьте строки:
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
Проверьте конфиг и перезапустите SSH:
sudo sshd -t && sudo systemctl restart ssh
Именно имя 01-... важно: у многих хостингов в той же папке лежит файл 50-cloud-init.conf с PasswordAuthentication yes, а SSH берёт первое найденное значение.
Проверьте с своего компьютера, что вход по паролю действительно отключён:
ssh -o PubkeyAuthentication=no user@IP_СЕРВЕРА
Должна появиться ошибка Permission denied (publickey) — значит, пароли больше не принимаются. Остальные шаги защиты сервера — в статье что сделать сразу после покупки VPS.
SSH-AGENT: чтобы не вводить парольную фразу каждый раз
ssh-agent держит расшифрованный ключ в памяти: фразу вводите один раз за сеанс, а ключ при этом остаётся защищённым на диске.
Linux. В большинстве дистрибутивов с рабочим столом агент уже запущен. Добавьте в него ключ:
ssh-add ~/.ssh/id_ed25519
Если появится ошибка Could not open a connection to your authentication agent, сначала запустите агент: eval "$(ssh-agent -s)".
macOS. Добавьте ключ в агент и сохраните фразу в Связке ключей:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
И добавьте в начало файла ~/.ssh/config две строки, чтобы ключ подгружался автоматически после перезагрузки:
AddKeysToAgent yes
UseKeychain yes
Windows. Служба ssh-agent по умолчанию выключена. Откройте PowerShell от имени администратора и включите её:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Затем в обычном PowerShell добавьте ключ:
ssh-add $env:USERPROFILE\.ssh\id_ed25519
Проверить, какие ключи загружены в агент, можно в любой системе: ssh-add -l.
Как безопасно хранить и использовать ключи
- Закрытый ключ никогда не покидает ваш компьютер. Не отправляйте его в мессенджерах, не кладите в облако и не копируйте на серверы. Даже поддержке хостинга нужен только открытый ключ.
- Отдельный ключ на каждое устройство. Не копируйте один ключ на ноутбук и рабочий ПК. Если устройство потеряно, достаточно удалить с сервера одну строку из
authorized_keys— по комментарию из-Cвидно, чей ключ. - Всегда ставьте парольную фразу. С ssh-agent она не мешает, а при краже устройства защищает доступ ко всем серверам. Добавить или сменить фразу у существующего ключа:
ssh-keygen -p -f ~/.ssh/id_ed25519. - Правильные права доступа. В Linux и macOS:
chmod 700 ~/.sshиchmod 600 ~/.ssh/id_ed25519. Иначе SSH откажется использовать ключ. - Доступ на случай потери ключа. Добавьте на сервер ключи с двух устройств и запомните, где в панели хостинга веб-консоль (VNC): через неё можно зайти на сервер без SSH и добавить новый ключ.
- Регулярно чистите
authorized_keys. Удаляйте ключи старых устройств и бывших сотрудников.
Частые ошибки
Permission denied (publickey). Сервер не принял ключ. Проверьте, что открытый ключ добавлен вauthorized_keysименно того пользователя, под которым вы входите, и что права на~/.sshиauthorized_keys— 700 и 600. Подробности покажет подключение с флагом-v:ssh -v user@IP_СЕРВЕРА.WARNING: UNPROTECTED PRIVATE KEY FILE!Закрытый ключ доступен другим пользователям. Исправьте:chmod 600 ~/.ssh/id_ed25519. В Windows так бывает, если ключ скопировали с другого диска: в свойствах файла → «Безопасность» оставьте доступ только своему пользователю.WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!У сервера сменился отпечаток — обычно после переустановки ОС на VPS. Если вы точно переустанавливали сервер, удалите старый отпечаток:ssh-keygen -R IP_СЕРВЕРА. Если нет — не подключайтесь и напишите в поддержку.Too many authentication failures. Агент предлагает серверу слишком много ключей по очереди. Укажите нужный:ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@IP_СЕРВЕРА, или добавьтеIdentitiesOnly yesв блокHostфайла config.- Сервер всё равно спрашивает пароль. Чаще всего неверные права на папку
.sshили ключ вставлен с переносом строки и потому разбит на части. Каждый ключ вauthorized_keys— строго одна строка.
Чек-лист
Частые вопросы
Что лучше: Ed25519 или RSA? Ed25519: ключ короче, быстрее и не уступает RSA по надёжности. RSA нужен только для очень старых систем — берите длину 4096 бит.
Можно ли использовать один ключ для нескольких серверов? Да. Один открытый ключ можно добавить на любое число серверов, а также в GitHub и GitLab.
Что делать, если я потерял закрытый ключ? Восстановить его нельзя. Зайдите на сервер через веб-консоль хостинга или с запасным ключом, создайте новый ключ и добавьте его открытую часть в authorized_keys, а старую строку удалите.
Что если я забыл парольную фразу? Расшифровать ключ без неё невозможно. Создайте новый ключ и замените его на серверах, как при потере ключа.
Нужен ли SSH-ключ для GitHub? Да, тот же самый. Скопируйте открытый ключ в Settings → SSH and GPG keys и проверьте подключение командой ssh -T git@github.com.