
Для обеспечения входа на удалённые серверы без лишних рисков необходимо изменить параметры демона OpenSSH. В конфигурационном файле /etc/ssh/sshd_config следует отключить аутентификацию по паролю и разрешить вход только по ключам.
Измените или добавьте следующие строки:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
После внесения изменений перезапустите службу:
systemctl restart ssh
Генерация пары ключей выполняется командой:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
Открытый ключ необходимо добавить в файл ~/.ssh/authorized_keys на сервере. Убедитесь, что права доступа к каталогу и файлам настроены корректно:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
По умолчанию в системе действует политика запрета аутентификации от имени root через удалённое соединение. Если требуется доступ с привилегиями, используйте sudo или включите вход от root, изменив параметр PermitRootLogin на prohibit-password.
В дистрибутиве предусмотрены дополнительные механизмы контроля доступа, включая Mandatory Access Control (MAC). Если включены модули безопасности, убедитесь, что для sshd задан корректный контекст SELinux или AppArmor:
ls -Z /usr/sbin/sshd
Рекомендуется ограничить доступ по IP, добавив в /etc/hosts.allow:
sshd: 192.168.1.0/24
Аналогично, в /etc/hosts.deny можно запретить все остальные соединения:
sshd: ALL
Для дополнительной защиты можно настроить двухфакторную аутентификацию с использованием Google Authenticator. Установите пакет:
apt install libpam-google-authenticator
Дальнейшая настройка выполняется через PAM и требует правки /etc/pam.d/sshd. Если требуется подробная инструкция по интеграции, обратитесь к документации системы.
Содержание статьи
Установка и запуск SSH-сервера в Astra Linux
Для корректной работы удаленного доступа необходимо установить пакет openssh-server. Используйте команду:
sudo apt install openssh-server -y
После завершения установки убедитесь, что служба активирована:
systemctl is-enabled ssh
sudo systemctl enable ssh
Запуск выполняется командой:
sudo systemctl start ssh
Проверить текущее состояние можно так:
systemctl status ssh
Если порт 22 используется другим процессом, выполните:
sudo netstat -tulnp | grep :22
Для смены порта редактируйте /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Измените строку:
#Port 22
Например:
Port 2222
После сохранения изменений перезапустите сервис:
sudo systemctl restart ssh
Проверить корректность конфигурации:
sudo sshd -t
Для работы через файрволл откройте нужный порт:
sudo ufw allow 22/tcp
Для другого порта:
sudo ufw allow 2222/tcp
Проверить открытые порты:
sudo ufw status
Если используется iptables, выполните:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Для применения перезагрузите правила:
sudo netfilter-persistent save
Список базовых команд:
| Команда | Описание |
|---|---|
systemctl restart ssh |
Перезапуск службы |
systemctl stop ssh |
Остановка сервиса |
systemctl disable ssh |
Отключение автозапуска |
Настройка аутентификации по ключам SSH
Генерация пары ключей осуществляется командой:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
Параметры:
-t ed25519– алгоритм шифрования (Ed25519 предпочтителен по скорости и безопасности);-f ~/.ssh/id_ed25519– путь к файлу ключа;-N ""– пустая парольная фраза (опционально).
Добавление открытого ключа на сервер:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Если ssh-copy-id отсутствует:
cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Отключение входа по паролю в конфигурации сервера:
sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
Перезапуск службы:
sudo systemctl restart ssh
Проверка входа по ключу:
ssh user@host
Если клиент запрашивает пароль, проверьте:
- права на
~/.ssh(700) и~/.ssh/authorized_keys(600); - наличие строки
PubkeyAuthentication yesв/etc/ssh/sshd_config; - соответствие пути ключа в
~/.ssh/config:
Host host
IdentityFile ~/.ssh/id_ed25519
Тестирование сервера на разрешенные методы входа:
ssh -o PreferredAuthentications=none -v user@host
sudo journalctl -u ssh --no-pager | tail -n 20
Основные параметры сервера:
| Параметр | Значение | Описание |
|---|---|---|
PubkeyAuthentication |
yes | Разрешает вход по ключу |
PasswordAuthentication |
no | Отключает пароли |
PermitRootLogin |
no | Запрещает вход root |
Ограничение доступа и управление пользователями SSH
Запрет входа под root: Отключите прямой доступ суперпользователя в файле /etc/ssh/sshd_config. Измените строку:
PermitRootLogin no
После внесения изменений выполните перезапуск службы:
systemctl restart ssh
Ограничение списка пользователей: Укажите разрешённых пользователей с помощью директив AllowUsers или AllowGroups:
AllowUsers user1 user2
AllowGroups sshusers
Запрещённые аккаунты можно задать через DenyUsers и DenyGroups.
Принудительное использование ключей: Включите параметр PasswordAuthentication no, чтобы запретить вход с паролем:
PasswordAuthentication no
Убедитесь, что у всех пользователей есть открытые ключи в ~/.ssh/authorized_keys.
Контроль времени сессии: Ограничьте простои с помощью:
ClientAliveInterval 300
ClientAliveCountMax 2
Ограничение числа подключений: Установите лимиты:
MaxAuthTries 3
MaxSessions 5
Дополнительные меры: Используйте /etc/security/access.conf для более гибкого контроля.
| Параметр | Описание | Пример |
|---|---|---|
| AllowUsers | Разрешает доступ только указанным пользователям | AllowUsers admin |
| PermitRootLogin | Запрещает вход под root | PermitRootLogin no |
| MaxAuthTries | Ограничивает число попыток входа | MaxAuthTries 3 |

