Как включить SSH в Linux. Как подключиться к Linux по SSH

0
7817
Обложка статьи: Как включить SSH в Linux. Как подключиться к Linux по SSH

После настройки доступа закройте остальное по чек-листу hardening Linux и добавьте второй фактор: MFA для SSH.

Нужно включить SSH на Linux-сервере, заходить по ключу и закрыть вход паролем и root. Ниже — Debian/Ubuntu и Alma/Rocky/RHEL. Заводские учётки Kali в интернет не выставляйте.

Не ставьте PermitRootLogin yes, чтобы «просто зайти». В man OpenSSH по умолчанию prohibit-password: root паролем не входит. Для сервера безопаснее PermitRootLogin no и отдельный пользователь с sudo.

Что нужно заранее

  • Консоль или уже открытая сессия с правами sudo — иначе ошибка в sshd_config отрежет вас от сервера.
  • Понимание, какой адрес слушает хост: ip -4 addr.
  • Клиент OpenSSH на рабочей станции.

Порт 22 с паролем в интернете перебирают постоянно. Если туда ещё и root — после подбора сразу полная оболочка.

1. Поставить и запустить сервер OpenSSH

Debian / Ubuntu:

sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
sudo systemctl status ssh --no-pager

Alma / Rocky / RHEL:

sudo dnf install -y openssh-server
sudo systemctl enable --now sshd
sudo systemctl status sshd --no-pager

Ожидание: служба active (running), в журнале нет ошибки разбора конфига. Пример systemctl status:

● ssh.service - OpenBSD Secure Shell server
     Active: active (running) since Sun 2026-10-11 10:01:02 UTC

Прослушиваемый порт:

ss -lntup | grep -E ':22s'

Пример строки: LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3)). Если 22 закрыт файрволом, откройте его только для management-сети. Debian с ufw:

sudo ufw allow from 192.0.2.0/24 to any port 22 proto tcp
sudo ufw status numbered

RHEL с firewalld:

sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.0.2.0/24 port port=22 protocol=tcp accept'
sudo firewall-cmd --reload

2. Отдельный пользователь, не root

sudo adduser deploy
sudo usermod -aG sudo deploy

На RHEL-подобных группа обычно wheel, не sudo:

sudo useradd -m -s /bin/bash deploy
sudo usermod -aG wheel deploy
id deploy

Пример id: uid=1001(deploy) gid=1001(deploy) groups=1001(deploy),27(sudo). Без флага -a команда usermod -G сотрёт остальные группы.

Второй человек — тот же ключ не копируйте: заведите alice и свой authorized_keys. В AllowUsers тогда deploy alice.

3. Ключ на рабочей станции

На своей машине, не на сервере:

ssh-keygen -t ed25519 -a 64 -f ~/.ssh/id_ed25519 -C "deploy@workstation"

-t ed25519 — современный тип ключа OpenSSH; -a 64 усиливает защиту ключевого файла парольной фразой. Парольную фразу ключа задайте. Установить открытый ключ:

ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@192.0.2.10

Подставьте адрес сервера. Если ssh-copy-id нет, это один раз делается по паролю:

ssh deploy@192.0.2.10 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
cat ~/.ssh/id_ed25519.pub | ssh deploy@192.0.2.10 'cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

Проверка: ssh -i ~/.ssh/id_ed25519 deploy@192.0.2.10 входит по ключу. Пример удачного входа:

Linux srv-01 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian
deploy@srv-01:~$

Если ключ не принят, ssh спрашивает пароль или пишет Permission denied (publickey). Не закрывайте уже открытую сессию, пока новый вход не подтверждён.

4. Минимальный профиль sshd

Лучше drop-in, чем править весь /etc/ssh/sshd_config — так проще откат.

sudo tee /etc/ssh/sshd_config.d/99-hardening.conf <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PubkeyAuthentication yes
MaxAuthTries 4
X11Forwarding no
AllowUsers deploy
EOF

Если каталога sshd_config.d нет, добавьте те же строки в /etc/ssh/sshd_config и уберите конфликтующие значения. Смысл директив по sshd_config(5):

  • PasswordAuthentication no — пароль не принимается. В man значение по умолчанию — yes.
  • KbdInteractiveAuthentication no — закрывает keyboard-interactive. На многих дистрибутивах включён UsePAM yes: man прямо предупреждает, что PAM может обойти PermitRootLogin prohibit-password, если keyboard-interactive оставлен.
  • PermitRootLogin no — root не входит ничем. Альтернатива prohibit-password, если root по ключу ещё нужен для узкого сценария (бэкап с forced-commands-only).
  • AllowUsers deploy — остальные локальные учётки по SSH не принимаются. Добавьте своих людей списком, не копируйте пример как единственное имя в проде.

Жёсткий sshd для Linux описан в CIS Benchmarks для вашей ОС. Удалённый доступ в NIST SP 800-53 — контроль AC-17. Это международная практика, не российский закон.

5. Проверка конфига и перечитывание

sudo sshd -t
sudo systemctl reload ssh

На RHEL: sudo systemctl reload sshd. sshd -t должен завершиться без вывода. Если есть синтаксическая ошибка — не reload, исправляйте, консоль оставьте открытой.

6. Как проверить

С другого хоста или из новой сессии, не из той, где вы правили конфиг:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no deploy@192.0.2.10
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@192.0.2.10
ssh -i ~/.ssh/id_ed25519 deploy@192.0.2.10

Первые две должны получить отказ. Пример отказа пароля:

deploy@192.0.2.10: Permission denied (publickey).

Третья — оболочку deploy. Дополнительно:

sudo sshd -T | grep -E 'passwordauthentication|kbdinteractiveauthentication|permitrootlogin|allowusers'

Пример вывода:

passwordauthentication no
kbdinteractiveauthentication no
permitrootlogin no
allowusers deploy alice

Ожидание: пароль и root закрыты, в allowusers только нужные люди.

Откат

Если новый вход не открывается, в живой консоли:

sudo rm /etc/ssh/sshd_config.d/99-hardening.conf
sudo sshd -t
sudo systemctl reload ssh

Не перезагружайте сервер, пока нет второго работающего входа. Не отключайте sshd «для проверки» на машине без KVM/IPMI/консоли провайдера.

Источники

Оставьте свой ответ