SSH в Linux: создание ключей, подключение и защита сервера

Админ
3 часа назад
0 комментария
SSH в Linux: создание ключей, подключение и защита сервера

Практически любой Linux-сервер администрируется удаленно через SSH (Secure Shell). С его помощью можно подключаться к серверу, управлять файлами, устанавливать программы, запускать службы и выполнять любые административные задачи.

Однако неправильная настройка SSH может стать причиной взлома сервера. Именно поэтому важно не только научиться подключаться по SSH, но и правильно защитить доступ.

В этой статье разберем, что такое SSH, как создать ключи, подключиться к серверу без пароля и выполнить базовую защиту сервера.


Что такое SSH

SSH (Secure Shell) — это сетевой протокол, который позволяет безопасно подключаться к удаленному серверу через зашифрованный канал.

В отличие от старых протоколов (например, Telnet), SSH шифрует весь передаваемый трафик, включая:

  • логины;

  • пароли;

  • команды;

  • передаваемые файлы.

Именно поэтому SSH является стандартом для удаленного администрирования Linux-серверов.


Для чего используется SSH

SSH позволяет:

  • подключаться к серверу;

  • выполнять команды;

  • управлять файлами;

  • запускать и останавливать службы;

  • копировать файлы между компьютерами;

  • создавать SSH-туннели;

  • работать с Git;

  • администрировать Docker, MySQL, Nginx и другие сервисы.

Практически любой VPS или выделенный сервер после покупки предоставляет доступ именно по SSH.


Проверка наличия SSH-клиента

На большинстве Linux и macOS SSH уже установлен.

Проверьте версию:

ssh -V

Например:

OpenSSH_9.8p1

В Windows 11 и Windows 10 последних версий клиент OpenSSH также установлен по умолчанию.


Подключение к серверу

Самая простая команда:

ssh root@192.168.1.100

где:

  • root — пользователь;

  • 192.168.1.100 — IP-адрес сервера.

Если SSH работает на другом порту:

ssh -p 2222 root@192.168.1.100

После первого подключения система попросит подтвердить отпечаток сервера:

Are you sure you want to continue connecting (yes/no)?

Введите:

yes

После этого сервер будет добавлен в список доверенных.


Создание SSH-ключей

Самый безопасный способ входа — использование пары SSH-ключей.

Создать ключ можно командой:

ssh-keygen -t ed25519 -C "my-server"

Если по каким-либо причинам алгоритм Ed25519 недоступен, можно использовать RSA:

ssh-keygen -t rsa -b 4096

Во время создания ключей система предложит:

  • путь для сохранения;

  • парольную фразу (по желанию).

После завершения будут созданы два файла.

Закрытый ключ:

~/.ssh/id_ed25519

Публичный ключ:

~/.ssh/id_ed25519.pub

Важно: никогда не передавайте и не публикуйте закрытый ключ (id_ed25519). Передавать можно только публичный ключ (.pub).


Копирование публичного ключа на сервер

Самый простой способ:

ssh-copy-id root@192.168.1.100

Если используется нестандартный порт:

ssh-copy-id -p 2222 root@192.168.1.100

После этого можно входить без ввода пароля.


Ручная установка ключа

Если ssh-copy-id недоступен:

Посмотреть содержимое публичного ключа:

cat ~/.ssh/id_ed25519.pub

Подключитесь к серверу по паролю и создайте каталог:

mkdir -p ~/.ssh

Установите правильные права:

chmod 700 ~/.ssh

Создайте файл:

nano ~/.ssh/authorized_keys

Вставьте содержимое публичного ключа и сохраните файл.

Установите права:

chmod 600 ~/.ssh/authorized_keys

Теперь вход по ключу будет работать.


Подключение с использованием ключа

Если используется стандартное имя файла:

ssh root@192.168.1.100

Если ключ называется иначе:

ssh -i ~/.ssh/my_key root@192.168.1.100

При нестандартном порте:

ssh -i ~/.ssh/my_key -p 2222 root@192.168.1.100

Настройка SSH-конфигурации

Чтобы не вводить длинные команды каждый раз, можно создать файл:

~/.ssh/config

Пример:

Host myserver
    HostName 192.168.1.100
    User root
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Теперь подключение выполняется одной командой:

ssh myserver

Копирование файлов по SSH

Скачать файл

scp root@192.168.1.100:/root/backup.sql .

Отправить файл

scp backup.sql root@192.168.1.100:/root/

Копирование каталога

scp -r project root@192.168.1.100:/var/www/

Использование rsync

Для больших файлов удобнее использовать rsync.

Синхронизация каталога:

rsync -avz project/ root@192.168.1.100:/var/www/project/

Преимущества:

  • докачка файлов;

  • высокая скорость;

  • копирование только изменений.


Проверка статуса SSH

На сервере:

sudo systemctl status ssh

или:

sudo systemctl status sshd

Запустить службу:

sudo systemctl start ssh

Перезапустить:

sudo systemctl restart ssh

Включить автозапуск:

sudo systemctl enable ssh

Изменение SSH-порта

По умолчанию используется порт:

22

Изменить его можно в файле:

/etc/ssh/sshd_config

Например:

Port 2222

После изменения:

sudo systemctl restart ssh

Не забудьте открыть новый порт в файрволе:

sudo ufw allow 2222/tcp

И только после проверки работы нового порта можно закрыть доступ к 22-му порту.


Запрет входа под пользователем root

Откройте файл:

sudo nano /etc/ssh/sshd_config

Найдите строку:

PermitRootLogin yes

Измените на:

PermitRootLogin no

После этого вход под пользователем root станет невозможен. Для административных задач используйте обычного пользователя и команду sudo.


Отключение входа по паролю

После того как вы убедились, что вход по ключу работает, рекомендуется отключить парольную аутентификацию.

В файле /etc/ssh/sshd_config измените:

PasswordAuthentication no
ChallengeResponseAuthentication no

Затем выполните:

sudo systemctl restart ssh

Важно: не отключайте вход по паролю, пока не убедитесь, что вход по ключу действительно работает. Иначе можно потерять доступ к серверу.


Ограничение доступа по пользователям

Разрешить вход только определенному пользователю:

AllowUsers roman

Или нескольким:

AllowUsers roman admin deploy

Это снизит вероятность несанкционированного доступа.


Проверка открытого SSH-порта

ss -tulpn | grep ssh

или:

ss -tulpn | grep 2222

Просмотр журнала подключений

Для поиска ошибок и анализа попыток входа:

journalctl -u ssh -f

или:

tail -f /var/log/auth.log

Здесь можно увидеть:

  • успешные подключения;

  • неудачные попытки входа;

  • ошибки авторизации.


Дополнительные меры безопасности

Для повышения безопасности сервера рекомендуется:

  • использовать SSH-ключи вместо паролей;

  • отключить вход по паролю;

  • запретить вход под пользователем root;

  • сменить стандартный SSH-порт;

  • регулярно обновлять систему;

  • использовать сложные парольные фразы для закрытых ключей;

  • ограничить доступ через файрвол;

  • установить Fail2Ban для автоматической блокировки IP-адресов после нескольких неудачных попыток входа;

  • регулярно проверять журналы безопасности.


Частые ошибки

Permission denied (publickey)

Возможные причины:

  • неверные права на каталог ~/.ssh;

  • неверные права на файл authorized_keys;

  • используется другой ключ;

  • публичный ключ отсутствует на сервере.


Connection refused

Обычно означает:

  • SSH-служба не запущена;

  • закрыт порт;

  • неправильно указан IP-адрес;

  • доступ блокируется файрволом.


Connection timed out

Причины:

  • сервер недоступен;

  • неверный порт;

  • проблемы с сетью;

  • отсутствует маршрут до сервера.


Заключение

SSH — это основной инструмент для безопасного управления Linux-серверами. Освоив подключение по ключам, настройку конфигурации и базовые меры защиты, вы значительно повысите безопасность своей инфраструктуры.

Использование SSH-ключей, отказ от парольной аутентификации, ограничение доступа для пользователей и регулярный контроль журналов помогут защитить сервер от большинства автоматизированных атак. Эти рекомендации актуальны как для небольших VPS, так и для производственных серверов, на которых работают сайты, базы данных, VPN-сервисы и корпоративные приложения.

Понравилась статья? Поделитесь:

💬 Комментарии 0

Оставить комментарий

Пока нет комментариев.

Будьте первым, кто оставит своё мнение!