Перейти к основному содержимому

ALIMUSAEV — IT и 1С

C:\> type \instructions\linux\nastroit-podklyuchenie-po-ssh-k-serveru-cherez-klyuch.md

Настроить подключение по SSH к серверу через ключ

НАЗНАЧЕНИЕ

Нужно настроить доступ по ssh к серверу через публичный ключ при наличии приватного, а парольный запретить. Особенно запретить вход от имени root.

ПРИМЕНЕНИЕ

Для более безопасного доступа к серверу по ssh через ключ из конкретной машины, а не из любой. Клиентами выступают Windows, Linux и Mac OS.

УСЛОВИЕ

  • Доступность 22 порта (можно поменять на другой при необходимости, но тот порт нужно открыть);

  • Наличие ssh-клиента (иначе установить open-ssh);

  • Доступность самого сервера.

ШАГИ

  1. Открыть терминал (если Linux и Mac OS) или командную строку (cmd или powershell, если Windows);

  2. Сгенерировать ключ:

Под 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
  1. Указать свою «фразу» и подтвердить паролем от той учетки на сервере;

  2. Скопировать ключ на сервер.

Под 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
  1. Соединиться по ssh через пароль к серверу:
ssh servuser@ip-address
  1. Открыть конфиг ssh:
sudo nano /etc/ssh/sshd_config
  1. В конфиге раскомментировать строки и выставить значения:
PermitRootLogin no #запретить доступ от root
PasswordAuthentication no #запретить доступ по паролю
PubkeyAuthentication yes #разрешить доступ через ключ
  1. Сохранить, выйти и перезапустить службу ssh:
sudo systemctl restart sshd
  1. Попробовать подключиться по 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
  1. Ввести свою ключевую фразу и подключиться.
**Примечание:** ради интереса можно попробовать подключиться с другого ПК, где нет приватного ключа — система не даст этого сделать.
  1. Для упрощения желательно отредактировать конфиг на клиентском 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
  1. Сохранить и выйти;

  2. Попробовать подключиться иначе:

ssh Server

РЕЗУЛЬТАТ

Доступ к серверу по ssh через публичный ключ настроен. По паролю никто не войдет. От имени root тем более. У кого нет приватного ключа, тот не сможет попасть на сервер.

ТИПОВЫЕ ОШИБКИ

❌ Проблема: утерян приватный ключ — невозможно попасть на сервер.

✅ Решение: сгенерировать ключ заново или при отсутствии прав попросить администратора.


❌ Проблема: доступ по паролю и от root сохранился.

✅ Решение: проверить шаг 7 на сервере и перезапустить службу sshd.


❌ Проблема: не удается подключиться к серверу по ssh.

✅ Решение: проверить доступность сети и порта; проверить корректность введенных данных.