НАЗНАЧЕНИЕ
Нужно настроить доступ по ssh к серверу через публичный ключ при наличии приватного, а парольный запретить. Особенно запретить вход от имени root.
ПРИМЕНЕНИЕ
Для более безопасного доступа к серверу по ssh через ключ из конкретной машины, а не из любой. Клиентами выступают Windows, Linux и Mac OS.
УСЛОВИЕ
-
Доступность 22 порта (можно поменять на другой при необходимости, но тот порт нужно открыть);
-
Наличие ssh-клиента (иначе установить open-ssh);
-
Доступность самого сервера.
ШАГИ
-
Открыть терминал (если Linux и Mac OS) или командную строку (cmd или powershell, если Windows);
-
Сгенерировать ключ:
Под Windows::
ssh-keygen -t ed25519 -C "комментарий" -f C:\Users\User\.ssh\id_ed25519_for_user
где User — имя пользователя Windows, _for_user — это название ключа, можно дать любое имя, а -C «комментарий» — необязательный параметр;
Под Linux и Mac OS:
ssh-keygen -t ed25519 -C "комментарий" -f ~/.ssh/id_ed25519_for_user
-
Указать свою «фразу» и подтвердить паролем от той учетки на сервере;
-
Скопировать ключ на сервер.
Под Windows:
type C:\Users\User\.ssh\id_ed25519_for_user.pub | ssh servuser@ip-address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
где servuser@ip-address — это имя учетной записи на сервере и ip-адрес сервера;
Под Linux и Mac OS:
ssh-copy-id -i ~/.ssh/id_ed25519_for_user.pub servuser@ip-address
- Соединиться по ssh через пароль к серверу:
ssh servuser@ip-address
- Открыть конфиг ssh:
sudo nano /etc/ssh/sshd_config
- В конфиге раскомментировать строки и выставить значения:
PermitRootLogin no #запретить доступ от root
PasswordAuthentication no #запретить доступ по паролю
PubkeyAuthentication yes #разрешить доступ через ключ
- Сохранить, выйти и перезапустить службу ssh:
sudo systemctl restart sshd
- Попробовать подключиться по ssh через ключ.
Под Windows:
ssh -i C:\Users\User\.ssh\id_ed25519_for_user servuser@ip-address
Под Linux и Mac OS:
ssh -i ~/.ssh/id_ed25519_for_user servuser@ip-address
- Ввести свою ключевую фразу и подключиться.
- Для упрощения желательно отредактировать конфиг на клиентском ssh.
Под Windows создать файл config в каталоге C:\Users\User\.ssh\config и в блокноте прописать:
Host Server #даем имя сервера, по которому будем подключаться вместо ввода ip-адреса и учетки
HostName ip-address
User servuser
IdentityFile C:\Users\User\.ssh\id_ed25519_for_user
Под Linux и Mac OS создать такой же файл командой sudo nano ~/.ssh/config и прописать:
Host Server #даем имя сервера, по которому будем подключаться вместо ввода ip-адреса и учетки
HostName ip-address
User servuser
IdentityFile ~/.ssh/id_ed25519_for_user
-
Сохранить и выйти;
-
Попробовать подключиться иначе:
ssh Server
РЕЗУЛЬТАТ
Доступ к серверу по ssh через публичный ключ настроен. По паролю никто не войдет. От имени root тем более. У кого нет приватного ключа, тот не сможет попасть на сервер.
ТИПОВЫЕ ОШИБКИ
❌ Проблема: утерян приватный ключ — невозможно попасть на сервер.
✅ Решение: сгенерировать ключ заново или при отсутствии прав попросить администратора.
❌ Проблема: доступ по паролю и от root сохранился.
✅ Решение: проверить шаг 7 на сервере и перезапустить службу sshd.
❌ Проблема: не удается подключиться к серверу по ssh.
✅ Решение: проверить доступность сети и порта; проверить корректность введенных данных.



