Пароль root можно подобрать, ключ — нет. Вход по SSH-ключу занимает пять минут настройки и закрывает самую частую причину взлома серверов — перебор паролей.
Как это работает
SSH-ключ — это пара файлов. Приватный ключ (id_ed25519) остаётся на вашем компьютере и никому не передаётся. Публичный ключ (id_ed25519.pub) копируется на сервер в файл authorized_keys. При подключении сервер проверяет, что у вас есть приватный ключ от этой пары, — пароль по сети не передаётся вообще.
Один ключ можно положить на любое количество серверов. Если ноутбук украли или сотрудник уволился, достаточно удалить его публичный ключ из authorized_keys — менять пароли на всех серверах не нужно.
Шаг 1. Создайте ключ на Linux или macOS
Откройте терминал и выполните:
ssh-keygen -t ed25519 -C "ivan@company.uz"
На вопрос о пути нажмите Enter — ключ сохранится в ~/.ssh/id_ed25519. Затем задайте парольную фразу: если приватный ключ украдут, без неё им нельзя будет воспользоваться. Пустую фразу оставляйте только для ключей, которыми пользуются скрипты и бэкапы.
Если сервер старый и не понимает ed25519 (CentOS 6 и раньше), создайте RSA-ключ: ssh-keygen -t rsa -b 4096.
Шаг 1. Создайте ключ на Windows 10 и 11
В Windows 10 (1809 и новее) и Windows 11 клиент OpenSSH уже встроен. Откройте PowerShell — администратором быть не нужно — и выполните ту же команду:
ssh-keygen -t ed25519 -C "ivan@company.uz"
Ключи появятся в папке C:\Users\ВАШЕ_ИМЯ\.ssh\. Если команда не найдена, включите компонент: «Параметры → Приложения → Дополнительные компоненты → Клиент OpenSSH».
PuTTY. Если вы подключаетесь через PuTTY, создайте ключ в PuTTYgen: тип EdDSA (Ed25519) → Generate → задайте Key passphrase → Save private key (файл .ppk). Публичный ключ скопируйте из верхнего поля «Public key for pasting into OpenSSH authorized_keys file» — он нужен на следующем шаге.
Шаг 2. Передайте ключ на сервер Linux
С Linux и macOS — одной командой. Она спросит пароль сервера в последний раз и сама положит ключ куда нужно:
ssh-copy-id root@ВАШ_IP
Если SSH на нестандартном порту: ssh-copy-id -p 2222 root@ВАШ_IP.
С Windows команды ssh-copy-id нет, поэтому в PowerShell используйте такую:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@ВАШ_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Вручную (например, из ключа PuTTYgen или через консоль в личном кабинете): зайдите на сервер, откройте файл nano ~/.ssh/authorized_keys и вставьте публичный ключ одной строкой. Права должны быть такими: папка ~/.ssh — 700, файл — 600, иначе сервер проигнорирует ключ.
Проверьте: ssh root@ВАШ_IP должен пустить без пароля сервера (спросит только парольную фразу ключа, если вы её задали).
Шаг 2. Передайте ключ на Windows Server
На Windows Server 2019, 2022 и 2025 сначала включите сервер OpenSSH — в PowerShell от администратора:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Куда класть ключ, зависит от пользователя:
- Обычный пользователь — в файл
C:\Users\ИМЯ\.ssh\authorized_keys. - Пользователь из группы «Администраторы» — в общий файл
C:\ProgramData\ssh\administrators_authorized_keys. Файл в папке пользователя для администраторов не читается — это самая частая причина, почему «ключ не работает».
Для администратора выполните на сервере (вставьте свой публичный ключ в кавычки):
Add-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value "ssh-ed25519 AAAA... ivan@company.uz"
icacls.exe C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
Вторая команда оставляет доступ к файлу только администраторам и системе — с другими правами sshd ключ не примет. На русской версии Windows группа называется «Администраторы».
Шаг 3. Отключите вход по паролю
Только после того, как убедились, что вход по ключу работает, — иначе закроете доступ себе. На Linux откройте /etc/ssh/sshd_config и поставьте:
PasswordAuthentication no
PermitRootLogin prohibit-password
В Ubuntu 22.04 и 24.04 проверьте ещё папку /etc/ssh/sshd_config.d/ — файл 50-cloud-init.conf может снова включать пароли. Затем перезапустите службу и, не закрывая текущее окно, проверьте вход в новом:
sudo sshd -t && sudo systemctl restart ssh
На Windows Server то же самое в файле C:\ProgramData\ssh\sshd_config: PasswordAuthentication no, затем Restart-Service sshd.
Ключ с одного сервера на другой
Для бэкапов через rsync, деплоя или репликации базы один сервер должен заходить на другой без пароля. Создайте ключ на сервере A и передайте его на сервер B:
ssh-keygen -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@server-a"
ssh-copy-id -i ~/.ssh/backup_key.pub user@SERVER_B
ssh -i ~/.ssh/backup_key user@SERVER_B "hostname"
Для таких ключей заведите на сервере B отдельного пользователя с минимальными правами — не root. Свой личный приватный ключ на серверы не копируйте: если нужно перейти с сервера на сервер, используйте ssh -A или ssh -J (jump-хост).
Удобство: файл ~/.ssh/config
Чтобы не набирать IP, порт и путь к ключу каждый раз, опишите серверы в ~/.ssh/config (на Windows — C:\Users\ИМЯ\.ssh\config):
Host prod
HostName 185.0.0.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
Теперь достаточно ssh prod, а scp и rsync понимают это имя так же.
Если не пускает
- Запустите
ssh -v root@ВАШ_IP— в выводе видно, какой ключ предлагается и что ответил сервер. - Linux: права
~/.ssh— 700,authorized_keys— 600, владелец — сам пользователь. Ошибки сервера — вjournalctl -u ssh. - Windows Server: администратор → ключ в
administrators_authorized_keys, права через icacls. Журнал — «Просмотр событий → Журналы приложений и служб → OpenSSH». - Ключ в
authorized_keysдолжен быть одной строкой: при копировании из PuTTYgen или мессенджера часто появляются переносы.
На VPS MyCloud у вас всегда есть запасной вход — консоль сервера в личном кабинете mcvps.uz: если ошиблись в настройках SSH, через неё можно всё исправить. Сервер с Ubuntu, Debian или Windows Server создаётся на странице VPS серверов.
Нужна помощь с задачей из статьи?
Подберём конфигурацию, посчитаем стоимость и поможем с переносом.