sudo sshd -T | grep -i permitrootдействующее значение параметра
sudo systemctl reload sshприменить без разрыва сессий
ss -tlnp | grep :22слушает ли порт
journalctl -u ssh -fлоги подключений в реальном времени
Обзор
sshd — сервер OpenSSH, принимает удалённые подключения (порт 22 по умолчанию).
Управляется systemd (юнит называется ssh в Ubuntu). Аутентификация — по
ключам (рекомендуется) или паролю.
Вход по ключу: публичный ключ клиента кладётся в ~/.ssh/authorized_keys на сервере
(см. ssh-keys).
bash
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
Применить изменения безопасно (не обрывая текущую сессию):
Важно. Меняя SSH-конфиг удалённо, держи второй открытый сеанс — так
ошибка не закроет доступ к серверу. Страховка с авто-откатом по таймеру:
sudo sh -c 'sleep 300 && systemctl restart ssh' &.
Рецепты
2
Хардненинг
Параметр
Зачем
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
Команды
bash
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 # отладка подключения с клиента
Неполадки
5
СимптомПричина и решение
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 — всегда проверяй).
Опасно
reload/restart применяют новый конфиг ко всем последующим подключениям
сразу; ошибка в PermitRootLogin, AllowUsers или PasswordAuthentication
может закрыть доступ, включая твой собственный. Правь конфиг только при
открытом втором сеансе и проверяй sshd -t до перезапуска, а не после.
Отключение PasswordAuthentication без предварительно установленного и
проверенного ключа оставит сервер без единого рабочего способа входа.
См. также
systemctl — Управление службами systemd — start/stop/restart/status/enable/reload.
firewall — Фильтрация трафика — простой ufw и низкоуровневый nftables.
sudo — Выполнение команд от root и других пользователей; sudoers и NOPASSWD.