🧷 SSH-ключи: Windows → Linux

1) 🔐 Создать ключ на Windows (PowerShell)



ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\MyServerKey -C "myserver"

  • -t ed25519 — выбираешь тип ключа (алгоритм).
  • -f ...\MyServerKey — имя файла ключа (ты задаёшь сам; это и есть “название ключа” в быту).
  • -C "myserver" — комментарий, чтобы потом понимать “для чего ключ”.
После команды появятся 2 файла:
  • MyServerKey — приватный (никому, никуда не отправлять)
  • MyServerKey.pub — публичный (его и добавляют на сервер)

2) 📌 Достать публичный ключ на Windows (чтобы вставить на сервер)



type $env:USERPROFILE\.ssh\MyServerKey.pub

Скопируй всю строку целиком (начинается с ssh-...).

3) 📥 Добавить ключ на Linux сервер (в authorized_keys)

На сервере заходишь под нужным пользователем (например user), и делаешь:


mkdir -p ~/.ssh

  • mkdir -p создаёт папку, даже если её не было (и не ругается, если уже есть).
  • ~/.ssh — стандартное место для SSH-настроек пользователя.
Дальше открываешь файл ключей:


nano ~/.ssh/authorized_keys

  • Вставляешь публичный ключ одной строкой → сохраняешь.
И выставляешь права (это важно, иначе SSH может игнорировать ключи):


chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

  • 700 — доступ к папке только владельцу.
  • 600 — файл читается/пишется только владельцем.

4) ✅ Проверка входа по ключу с Windows



ssh -i $env:USERPROFILE\.ssh\MyServerKey user@server -p 2222

  • -i ...MyServerKey — указываешь приватный ключ (без .pub).
  • user@server — логин и адрес.
  • -p 2222 — порт (если не стандартный).
Если пустило без пароля — ключ работает.

5) 🧱 Настройка SSH на сервере: root только по ключу, юзер может по паролю

В /etc/ssh/sshd_config обычно достаточно таких строк:


PermitRootLogin prohibit-password
PasswordAuthentication yes
PubkeyAuthentication yes

Смысл:
  • root по паролю не пускаем, но по ключу — можно
  • пароли для обычных пользователей разрешены
  • ключи разрешены
Применить изменения:


sudo systemctl restart ssh

6) 🧠 Мини-чек: если “Permission denied (publickey)”

Быстро пробегись:
  • ключ добавлен именно в ~/.ssh/authorized_keys того пользователя, под которым входишь
  • права выставлены:
  • ~/.ssh → 700
  • authorized_keys → 600
  • в команде на Windows указан приватный ключ (MyServerKey), а не .pub
  • порт/логин правильные

7) 🧩 Чтобы не писать каждый раз -i и -p (SSH config на Windows)

Файл: C:\Users\YOU\.ssh\config
Пример:


Host mybox
HostName nl1.topgworks.ru
Port 2222
User root
IdentityFile ~/.ssh/MyServerKey
IdentitiesOnly yes

  • Host mybox — короткое имя команды
  • HostName — адрес сервера
  • Port — порт
  • User — логин
  • IdentityFile — путь к приватному ключу (с ~ как домашней папкой)
  • IdentitiesOnly yes — использовать только этот ключ (чтобы SSH не перебирал другие)
Подключение станет таким:

ssh mybox