Вики / Службы и systemd
sshd (SSH-сервер)
Сервер SSH — удалённый доступ по ключам, конфиг и хардненинг.
sshd — сервер OpenSSH, принимает удалённые подключения (порт 22 по умолчанию). Управляется systemd (юнит называется ssh в Ubuntu). Аутентификация — по ключам (рекомендуется) или паролю.
Вход по ключу: публичный ключ клиента кладётся в ~/.ssh/authorized_keys на сервере
(см. ssh-keys).
systemctl status ssh
ss -tlnp | grep :22 # слушает ли порт (см. ss)
Главный конфиг — /etc/ssh/sshd_config (+ сниппеты в /etc/ssh/sshd_config.d/).
Безопасная база:
PermitRootLogin no
PasswordAuthentication no # только ключи
PubkeyAuthentication yes
Port 22
Применить изменения безопасно (не обрывая текущую сессию):
sudo sshd -t # проверить синтаксис конфига
sudo sshd -T | grep -i permitroot # показать ДЕЙСТВУЮЩИЕ значения (важно!)
sudo systemctl reload ssh # применить (юнит ssh)
⚠️ Меняя SSH-конфиг удалённо, держи второй открытый сеанс — если ошибёшься, не закроешь себе доступ. Полезно:
sudo sh -c 'sleep 300 && systemctl restart ssh' &как страховку с авто-откатом по таймеру.
| Параметр | Зачем |
|---|---|
PermitRootLogin no |
не пускать root напрямую |
PasswordAuthentication no |
только ключи (главное против брутфорса) |
MaxAuthTries 3 |
меньше попыток за коннект |
AllowUsers alice bob |
белый список пользователей |
AllowGroups sshusers |
белый список групп |
AllowTcpForwarding no |
запретить туннели (если не нужны) |
X11Forwarding no |
отключить проброс X |
ClientAliveInterval 300 |
отключать мёртвые сессии |
Гибко — через Match (для группы/адреса):
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
systemctl status ssh # состояние сервера
sshd -t # проверка sshd_config (синтаксис)
sudo sshd -T # эффективная конфигурация (все параметры)
ss -tlnp | grep :22 # слушает ли порт
journalctl -u ssh -f # логи подключений/отказов
journalctl -u ssh | grep -i fail # неудачные входы (брутфорс? см. fail2ban)
ssh -v user@host # отладка подключения с клиента
Permission denied (publickey)
Права на сервере: ~/.ssh=700, authorized_keys=600, владелец — сам пользователь.
journalctl -u ssh → часто «Authentication refused: bad ownership or modes». См. ssh-keys.
Connection refused
Сервер не слушает порт: ss -tlnp | grep :22, systemctl status ssh. Либо порт
закрыт файрволом — разреши 22/tcp (см. firewall).
Connection timed out
Сетевой/файрвол-уровень (не дошёл до sshd): маршрут, security group, nftables. Проверь
nc -zv host 22.
Сменил порт — не пускает
SELinux/порт не разрешён, файрвол на старом порту, или клиент идёт на 22. Открой новый
порт в firewall, проверь sshd -T | grep -i port.
Заблокировал себя сменой конфига
Зайди через консоль гипервизора/serial и откати sshd_config (или sshd -t показал
бы ошибку до reload — всегда проверяй).
sudo sshd -t # проверить конфиг
sudo sshd -T | grep -i <param> # действующее значение
systemctl reload ssh # применить
ss -tlnp | grep :22 ; journalctl -u ssh -f
# база: PermitRootLogin no · PasswordAuthentication no · AllowUsers
См. также
- Файрвол (nftables / ufw) — Сеть
- sudo — Пользователи и права
- systemctl — Службы и systemd