🧷 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