На этой странице
SSH-ключи безопаснее паролей и удобнее в работе. В этом руководстве вы создадите ключи на рабочем компьютере, скопируете их на сервер FlexDedi, а затем отключите вход по паролю так, чтобы не потерять доступ.
Понадобятся IPv4-адрес сервера и пароль root — оба указаны на странице сервера в панели управления. В примерах используется адрес 203.0.113.10; замените его своим.
Перед началом работы
OpenSSH предустановлен в Linux, macOS, Windows 10 и 11, а также в Windows Server 2019 и более поздних версиях. В Windows это можно проверить командой ssh -V в PowerShell. Если команда не найдена, установите клиент из PowerShell с правами администратора:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.01. Создайте пару ключей
В терминале Linux или macOS и в Windows PowerShell команда одинаковая:
ssh-keygen -t ed25519 -C "alice@laptop"Оставьте расположение по умолчанию и задайте парольную фразу. Закрытый ключ (id_ed25519) остаётся на вашем компьютере: в ~/.ssh в Linux и macOS или в C:\Users\alice\.ssh в Windows. На серверы попадает только открытый ключ (id_ed25519.pub).
2. Скопируйте открытый ключ на сервер
В Linux и macOS утилита ssh-copy-id в последний раз запросит пароль root и добавит ключ с правильными правами доступа:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203.0.113.10В Windows нет ssh-copy-id, поэтому передайте ключ по SSH через конвейер:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@203.0.113.10 "umask 077; mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Затем убедитесь, что ключ работает. Командная оболочка должна открыться без запроса пароля:
ssh -i ~/.ssh/id_ed25519 root@203.0.113.103. Добавьте ключ в агент
Агент хранит разблокированный ключ, поэтому парольную фразу достаточно вводить один раз за сеанс. В Linux выполните ssh-add ~/.ssh/id_ed25519. В macOS команда ssh-add --apple-use-keychain ~/.ssh/id_ed25519 вдобавок сохранит парольную фразу в связке ключей.
В Windows один раз включите службу агента из PowerShell с правами администратора, затем добавьте ключ:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed255194. Сохраните сервер в ~/.ssh/config
Запись хоста заменяет длинные команды коротким именем. Добавьте в ~/.ssh/config (в Windows — C:\Users\alice\.ssh\config, синтаксис тот же):
Host fd-db1
HostName 203.0.113.10
User root
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 30Теперь для подключения достаточно ssh fd-db1, а имя работает также с scp и rsync, например: rsync -a ./site/ fd-db1:/srv/site/. Параметр IdentitiesOnly yes не даёт клиенту предлагать серверу все ключи из агента подряд — иначе дело может закончиться ошибкой «Too many authentication failures».
5. Безопасно отключите вход по паролю
Вход по паролю притягивает попытки перебора. Отключите его, как только заработает вход по ключу, — в таком порядке.
Шаг 1. Не закрывайте текущий SSH-сеанс и проверьте вход по ключу из второго терминала.
Шаг 2. Создайте дополнительный файл конфигурации (drop-in), который разрешает вход только по ключам:
cat > /etc/ssh/sshd_config.d/00-keys-only.conf <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
EOFПрефикс 00- важен. В Ubuntu, Debian, AlmaLinux и Rocky Linux строка Include для этого каталога находится в начале /etc/ssh/sshd_config, а sshd использует первое прочитанное значение каждого параметра. Поэтому приоритет у файлов, прочитанных раньше, — в том числе над 50-cloud-init.conf, который разрешает вход по паролю.
Шаг 3. Проверьте конфигурацию и выведите параметры, которые sshd будет использовать на самом деле:
sshd -t && sshd -T | grep -Ei '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)'Ожидаемый результат: no, no и without-password — это прежнее название prohibit-password.
Шаг 4. Перезапустите службу. Открытые сеансы не прервутся:
# Ubuntu and Debian
systemctl restart ssh
# AlmaLinux and Rocky Linux
systemctl restart sshdШаг 5. С рабочего компьютера убедитесь, что пароли теперь отклоняются:
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password root@203.0.113.10Ожидаемый ответ — Permission denied (publickey). Надёжный пароль root всё равно оставьте: он по-прежнему действует в консоли KVM, которая работает в обход SSH, и это ваш путь обратно на сервер.
6. Восстановите доступ через консоль KVM
Потерянный ключ, правило файрвола, блокирующее порт 22, бан от fail2ban или испорченный файл конфигурации sshd — всё это может лишить вас доступа. Консоль KVM даёт прямой доступ к экрану и клавиатуре сервера, без сети и SSH.
- В панели управления откройте сервер и запустите консоль KVM.
- Войдите как
rootсо своим паролем. - Найдите причину:
sshd -t # syntax errors in the configuration
journalctl -u ssh -n 50 --no-pager # use -u sshd on AlmaLinux and Rocky Linux
chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys
ufw status verbose # or: nft list ruleset
fail2ban-client set sshd unbanip 198.51.100.7 # your workstation's IP, if bannedЧтобы установить новый ключ, проще всего указать PasswordAuthentication yes в вашем drop-in-файле, перезапустить SSH, выполнить ssh-copy-id с рабочего компьютера, а затем вернуть значение no.
Если пароль root вы тоже не помните, загрузите систему восстановления и добавьте ключ или сбросьте пароль оттуда, как описано в разделе Переустановка ОС и режим восстановления. Подробнее о самой консоли — в разделе Работа с IPMI и консолью HTML5 KVM.
Предупреждение о ключе хоста после переустановки
При переустановке генерируются новые ключи хоста, поэтому клиент предупредит, что идентификация удалённого хоста изменилась. Если вы только что переустановили систему, удалите старую запись и подключитесь снова:
ssh-keygen -R 203.0.113.10Если вы ничего не переустанавливали, не обходите предупреждение. Сначала проверьте отпечаток через консоль KVM, как показано в разделе Начало работы.