- Использование SSH для подключения к Linux
- Применение SSH
- Протокол SSH: шифрование
- Симметричное шифрование
- Ассиметричное шифрование
- Хэширование
- Коротко о принципе работы SSH
- Настройка SSH на стороне сервера
- Замена стандартного порта
- Отключение доступа root
- Ограничение авторизации по паролю
- Ограничение доступа по IP
- SSH-клиенты
- Авторизация
- По паролю
- По ключам
- Заключение
Использование SSH для подключения к Linux
SSH — Secure Shell — протокол прикладного уровня, разработанный для обеспечения подключения к удалённому устройству и туннелирования TCP-соединений. Все данные, передающиеся по этому протоколу, шифруются — при этом допустимо выбирать различные алгоритмы — поэтому пользователь может безопасно вводить конфиденциальные данные и пароли.
Применение SSH
SSH-протокол применяется для удалённого подключения. Так, любые облачные серверы , которые вы заказываете, могут быть доступны на расстоянии, несмотря на то, что устройства находятся в дата-центрах поставщика услуг.
Помимо администрирования удалённых серверов у вас есть возможность передавать данные между удалёнными устройствами благодаря специальным утилитам, работающим на основе протокола SSH, пример такой программы — SCP.
SSH-тоннелирование — ещё один пример применения протокола SSH. Оно используется для обеспечения защищённого соединения с сервером и создания зашифрованного канала или приватной сети.
SSH интегрирован в протокол SFTP, который обладает тем же набором функций, что и FTP, с той разницей, что вся информация на этом уровне шифруется.
Протокол SSH: шифрование
Как было указано выше, все данные, которые передаются по протоколу, шифруются. В зависимости от того, как взаимодействуют между собой устройства, выделяют два подхода к шифрованию — асимметричное и симметричное.
Симметричное шифрование
В общих чертах процедура симметричного шифрования происходит следующим образом. Стороны обмениваются ключами, которые будут использоваться при шифровании.
Приватный ключ это не то же самое, что ключ авторизации. Его отличие в том, что он защищает ещё и непосредственно ввод и передачу логина и пароля пользователя.
В зависимости от настроек применяются различные методы шифрования: Blowfish, AES и другие. В результате используется первый в списке в файле конфигурации клиента, который поддерживается сервером.
Ассиметричное шифрование
В этом виде шифрования задействованы два ключа — приватный (private) и публичный (public).
Приватный ключ ни в коем случае не должен быть скомпрометирован, поскольку именно он предназначен для расшифровки информации. Публичный ключ, как следует из названия, можно раскрывать и передавать третьим лицам — получить из него приватный ключ никак не получится. Иными словами, механизм ассиметричного шифрования следующий: информация шифруются публичным ключом, а дешифруется приватным.
Пример такого шифрования — аутентификация на базе ключей. Сначала клиент создаёт пару ключей, после этого публичный ключ копируется в каталог ~/.ssh на сервере. После установки соединения сервер отправляет проверочное сообщение, которое шифрует публичным ключом. Если клиент может его дешифровать, значит он — обладатель приватного ключа и имеет право на авторизацию. Поэтому крайне важно надёжно хранить приватный ключ.
Хэширование
Каждый набор данных после шифрования публичным ключом подписывается специальным хэшем. Хэширование — необратимая криптографическая обработка информации, в результате неё появляется уникальный набор символов. Поскольку алгоритм обработки не зависит от данных, при хэшировании одного набора данных получается одинаковый результат.
Это свойство механизма хэширования — основная причина его использования для верификации подлинности сообщений. В протоколе SSH верификация позволяет проверить, что данные не были перехвачены или подменены во время передачи.
Для генерации подписи используется хэш, основанный на порядковом номере пакета, его содержимом и приватном ключе.
Коротко о принципе работы SSH
Рассмотрим, как работает подключение через SSH в Linux и других ОС.
Сервер ожидает подключений на порту, который используется демоном sshd (чаще всего — 22). Клиент, в свою очередь, создаёт подключение и определяет метод шифрования.
Когда между устанавливается TCP-соединение, стороны обмениваются различной вспомогательной информацией — поддерживаемыми методами шифрования, ключом public host и проч.
Далее ключ генерируется по алгориутму Диффи-Хеллмана, путём объединения ключей. Механизм работы алгоритма:
- Стороны генерируют одинаковое число и выбирают стандарт шифрования.
- Далее обе стороны выбирают новое число и не сообщают друг другу о нём.
- Сгенерированное на шаге 2 число используется в качестве приватного ключа, а число из пункта 1 — публичного.
- Стороны передают публичные ключи друг другу.
- Вычисляя общий секрет, каждая сторона использует свой приватный ключ и чужой публичный. Его используют для симметричного шифрования.
Основное преимущество этого процесса — ни клиент, ни сервер не контролируют генерацию ключа, хотя участвуют в процессе оба.
Настройка SSH на стороне сервера
Чтобы без проблем подключаться к удалённому устройству по SSH, нужно, чтобы и клиент, и сервер были корректно сконфигурированы. Рассмотрим, как обеспечить на сервере Linux доступ по SSH .
1. В первую очередь нужно обновить репозиторий с помощью apt:
2. Далее устанавливаем набор программ OpenSSH:
sudo apt install openssh-server ssh
3. Запускаем sshd и добавляем в автозагрузку с помощью systemd:
sudo systemctl enable sshd
4. Проверям. Для этого, во-первых, смотрим статус работы sshd:
sudo systemctl sshd status
5. Во-вторых, пробуем подключиться к самому серверу:
Если вы видите предложение добавить отпечаток и диалоговое окно с вопросом, продолжать ли соединение, то всё настроено корректно. Далее разберёмся, что это значит.
Стандартная настройка на этом завершена. Однако рекомендуется выполнить ещё несколько простых шагов для повышения безопасности.
Настройка SSH задаётся в файле /etc/ssh/sshd_config.
Замена стандартного порта
Порт SSH по умолчанию — 22. Многие специалисты рекомендуют менять это значение на любое другое (можно выбрать любой порт от 50000 до 65000). Причина в том, что, если устройство находится в общей сети и доступен из интернета, он неизбежно будет подвергаться атакам и автоматическим попыткам взлома. Даже если механизм авторизации надёжен, сервер всё равно выполняет немало работы: журналирование попыток входа, установление соединения, генерация ключа и так далее.
Если заменить порт или закрыть его с помощью таблиц маршрутизации iptables , нагрузка существенно снизится — соединения с 25 портом будут отсекаться ещё на этапе установки соединения.
sudo nano /etc/ssh/sshd_config
Находим переменную Port 22 и заменяем 22 на, например, 55222. Если настройки ssh стандартные, не забудьте раскоментировать строку.
Отключение доступа root
Смена стандартного порта повышает безопасность, но не гарантирует то, что злоумышленники не узнают, какое значение вы указали в файле конфигурации, — существует программное обеспечение, которое сканирует порты сервера.
В качестве ещё одной меры безопасности закроем удалённый доступ учётной записи root, так как иначе злоумышленники при попадании в систему получат неограниченные полномочия.
Ограничим доступ, установив флаг переменной PermitRootLogin на no.
Ограничение авторизации по паролю
Следующий шаг — запрет входа по паролю. Вместо этого включим принудительное использование ключей, присвоив переменной PasswordAuthentication флаг no.
Затем перезапустите демон sshd:
sudo systemctl restart sshd
Ограничение доступа по IP
Вы также имеете возможность ограничить SSH-соединение Linux -сервера, дав доступ ограниченному диапазону IP-адресов. Чтобы это сделать, откройте файл /etc/hosts.deny:
… и добавьте строку sshd: ALL .
В конфиге /etc/hosts.allow укажите разрешённые IP-адреса:
sudo nano /etc/hosts.allow
sshd: 182.10.0.1 182.10.0.10
SSH-клиенты
Если вы подключаетесь с Windows-устройств, можете использовать специальные приложения. Например, PuTTY, WinSCP или Termius. Если работаете в unix-системах, вам доступно подключение по SSH из консоли Linux или terminal напрямую.
Авторизация
Рассмотрим, как выполнить подключение по SSH в Linux . Самый простой способ авторизации на сервере — войти с помощью пароля, который передаётся по защищённому соединению. Однако, рекомендуется не использовать этот метод, поскольку пароль может быть скомпрометирован, утерян или подобран злоумышленником перебором (брутфорс-атака).
В качестве альтернативы рекомендуется использовать вход по ключам.
По паролю
Чтобы подключиться к серверу, воспользуйтесь командой:
ssh username@host, где username — имя пользователя, а host — сервер.
Выше — подключение с настройками по умолчанию, т. е. к 22 порту. В примере ниже мы изменили это значение на то, которое указали в конфигурации:
Если не указывать учётную запись и написать просто ssh host , попытка соединения будет устанавливаться с использованием имени текущего пользователя.
По ключам
Ключ должен быть сгенерирован на стороне клиента. Для этого воспользуйтесь утилитой ssh-keygen:
В папке ~/.ssh будет сгенерировано два файла:
- id_rsa — приватный ключ, на это намекают права: только владелец файла может читать и редактировать.
- id_rsa.pub — публичный ключ, об этом говорит и расширение, и права: доступен для чтения всем.
Далее нужно передать id_rsa.pub на сервер. Для этих целей воспользуйтесь утилитой ssh-copy-id:
ssh-copy-id host, где host — имя сервера.
Заключение
SSH — незаменимый протокол для специалистов, работающих с удалёнными устройствами. Он позволяет настраивать серверы, размещать и забирать файлы. И всё это по защищённому каналу.
Чтобы разобраться, как работает протокол, рассмотрели подключение по SSH Linux -устройств и с паролем, и с ключами доступа. В этих целях арендовали сервер с ОС Ubuntu на Timeweb Cloud , настроили на нём протокол и авторизовались на сервере с удалённого компьютера через командную строку.