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-сервисы и корпоративные приложения.