Как пользоваться SSH
Представим, что вы арендовали облачный сервер на cloud.timeweb.com для того, чтобы разместить на нем сайт. После покупки вы получите чистую систему, которую предстоит настраивать — устанавливать веб-сервер, загружать файлы и так далее. Для этого не нужно ехать в дата-центр с флешкой, в таких случаях используется протокол SSH.
SSH (от английского secure shell — защищённая оболочка) — это протокол для удалённого доступа к любым устройствам с операционной системой Linux : компьютерам, серверам, телефонам и так далее. Иными словами, это некий набор правил, позволяющий устанавливать соединение с устройством, которое физически расположено в любой точке мира.
Слово secure в названии протокола значит, что обмен данными между устройствами шифруется, а значит вы можете работать с чувствительной информацией — паролями, кодами доступа и так далее.
Информация передаётся в зашифрованном виде, таким образом повышается безопасность обмена данными, с которыми вы работаете. Соединение и аутентификация осуществляются одним из двух способов:
- Вход по паролю. Между клиентом и сервером создаётся общий секретный ключ, с его помощью шифруется трафик.
- Вход с помощью пары ключей. Перед первым соединением пользователь генерирует два ключа: открытый и закрытый. Они хранятся на удалённом и локальном устройствах соответственно.
В статье рассмотрим возможности протокола, синтаксис SSH-команд и настройки демона SSH.
Вход в систему с помощью ключей
Использовать пароль входа на сервер по протоколу SSH — небезопасно и неудобно. Во-первых, пароль можно подобрать перебором. Во-вторых, может произойти случайная утечка, ведь устройств может быть несколько, а значит и пароли разные, все не запомнить. А в-третьих, это утомительно — каждый раз вводить кодовое слово перед началом сеанса.
Самый надёжный способ — входить в систему с помощью пары ключей RSA.
Сначала нужно создать ключи на локальном компьютере:
В процессе создания вам нужно будет выбрать расположение файлов ключей и кодовое слово. Если хотите подключаться без пароля, оставляйте поле Passphrase пустым. Passphrase — это кодовое слово, которым дополнительно защищается ключ. Так, если ваш приватный ключ будет скомпрометирован, злоумышленники не смогут им воспользоваться без кодового слова.
Затем нужно отправить на сервер публичный ключ; на его публичность указывает суффикс .pub и права на чтение для всех пользователей:
Команда создаст сеанс SSH. После введения пароля публичный ключ будет скопирован в файл авторизованных ключей, и вам больше не понадобится вводить пароль.
Вы можете ещё больше увеличить безопасность, полностью отключив доступ по паролю. Для этого отредактируйте файл /etc/ssh/sshd_config , выставив следующие директивы:
- PasswordAuthentication no — запрещаем вход с паролем.
- PubkeyAuthentication yes — разрешаем аутентификацию по ключам SSH.
- ChallengeResponseAuthentication no — отключаем PAM-аутентификацию
После обновления файла перезагружаем демон SSH:
sudo systemctl reload ssh
Настройка SSH
Чтобы выполнить подключение, на удалённом устройстве должен быть запущен сервер sshd, в Ubuntu он запускается с помощью диспетчера systemd :
Конфигурация сервера sshd находится в файле /etc/ssh/sshd_config . Рассмотрим основные параметры настройки SSH, которые вы можете использовать.
Порт. По умолчанию sshd отслеживает изменения на 22 порту. Часто злоумышленники пытаются получить доступ к вашему устройству перебором паролей от суперпользователей — root, admin и так далее. Можно усложнить эту задачу и изменить стандартный порт на любой другой с помощью директивы Port.
Однако это не гарантирует полную безопасность, так как существуют скрипты, сканирующие порты устройства. Они определят порт, который «слушает» демон sshd, и всё равно попытаются заполучить доступ. Для большей безопасности рекомендуем закрыть SSH для root-пользователя.
Доступ суперпользователя. Поскольку в основном SSH используется для администрирования удаленных серверов Linux , по умолчанию во всех современных системах удалённый доступ суперпользователя root разрешён. Но это очень небезопасно, так как злоумышленники могут попытаться подобрать пароль и, если смогут попасть в систему, получат полный контроль над устройством. Для того, чтобы избежать таких сценариев, используйте директиву PermitRootLogin со значением no .
Протокол. SSH может работать по двум версиям протокола — 1 и 2. Вторая поддерживает больше методов шифрования и способов аутентификации. Если вы хотите использовать только одну из версий, используйте директиву Protocol: Protocol 2 .
Доступ только нескольким пользователям. Ещё больше увеличивает безопасность разрешение удалённого доступа только для определённых пользователей и групп — директивы AllowUsers и AllowGroups соответственно. Так, мы можем запретить доступ к серверу всем, кроме администраторов:
AllowGroups admin, infrastructure
Вы также можете запретить доступ конкретным пользователям с помощью DenyUsers и DenyGroups .
Сохранение ошибок. Уровень логгирования можно задать с помощью директивы LogLevel. Она отвечает за уровень наполнения системного журнала, то есть насколько подробно sshd будет будет сохранять сообщения, которые регистрирует. По умолчанию используется INFO , но в отладочных целях можно поставить VERBOSE или вовсе отключить журналирование QUIET .
Доступ по паролю. За возможность попасть на удалённое устройство с помощью пароля отвечает директива PasswordAuthentication со значениями yes (по умолчанию) или no .
После того, как вы внесли изменения и сохранили файл, нужно перезапустить сервер sshd, чтобы новая конфигурация вступила в силу. Перед этим убедитесь, что вы сохранили на сервер файл ключей или оставили доступ по паролю — иначе существует риск остаться без доступа к серверу.
sudo systemctl reload ssh
SSH-клиенты
На Windows-системах вы также можете использовать SSH для подключения к удалённому серверу с помощью специальных приложений. Они удобны тем, что позволяют запомнить данные для подключения или указать разные цветовые схемы для разных сеансов (полезно, когда вы администрируете несколько серверов). Среди наиболее популярных:
- PuTTY
- WinSCP
- Termius
- FileZilla — для передачи данных по SFTP
- MobaXterm
Если вы работаете в unix-системах, можно использовать простой терминал или командную строку.
Синтаксис
Для удалённого подключения нужно использовать команду SSH с указанием IP-адреса или доменного имени сервера:
В примере выше предполагается, что имена пользователей в локальной и удалённой системах совпадают. Чаще всего это не так, поэтому приходится отдельно указывать, какое имя использовать при подключении:
Завершить сеанс можно с помощью команды exit .
Если при настройке удалённого сервера вы указали порт отличный от 22, то на локальном устройстве вам нужно указать его при подключении, сделать это можно с помощью флага -p :
Сценарии использования
Ниже рассмотрим частые и наиболее интересные сценарии использования протокола SSH.
Передача файлов и каталогов
Если на вашем сервере настроен демон sshd, вы также можете пользоваться другими утилитами, которые работают на основе протокола SSH. Одна из таких утилит — scp, которая использует протокол RCP для передачи файлов.
Для того, чтобы передать файл filename.txt на устройство с адресом example.com и расположить его в каталоге ~/trash/txt, используйте следующую команду:
Если поменять местами локальный путь и сервер, то вы сможете забрать себе на локальное устройство файлы с удалённого сервера.
Когда нужно передать весь каталог, добавьте флаг -r . При путь к каталогу, в который вы собираетесь копировать данные, должен завершаться косой чертой.
Представим, что нам нужно скопировать каталог images с сервера себе на компьютер в папку documents:
Вы также можете передавать файлы между двумя удалёнными машинами, указывая вместо локальных файлов путь подключения к серверу.
SSH-туннели
Туннели через SSH позволяют устанавливать безопасный удалённый доступ и передавать файлы по защищённой сети. Чаще всего всего они применяются в случае, когда нужно получить доступ в частную сеть или создать зашифрованный канал.
Для того, чтобы пробросить порт с удалённого сервера, используйте флаг -L . Для примера рассмотрим случай, когда нам нужно разрешить работу с удалённой базой данных, которая доступна только на локальной машине, порт 3306.
Для этого выполним следующую команду:
В этой команде флаг -N означает, что на удалённой машине не нужно выполнять команду, 53306 — локальный порт, 127.0.0.1:3306 — адрес, на котором работает сервис MySQL на удалённом сервере.
Подробнее об SSH-туннелях читайте в нашей статье .
SFTP
SFTP (Secure File Transfer Protocol) — протокол передачи файлов, который работает поверх безопасного канала и является частью OpenSSH, поэтому если у вас корректно работает демон SSH, вы можете использовать SFTP без дополнительной настройки. Главное отличие SFTP от стандартного протокола FTP — шифрование абсолютно любой информации.
Создать сеанс SFTP можно с теми же доступами — логином и паролем или ключом — что и SSH. Кроме этого можно указать порт, если вы меняли его со стандартного 22 на какой-либо другой. Сделайте это с помощью команды:
После успешной аутентификации вы окажетесь на удалённом сервере и сможете работать с файлами.
Заключение
В статье мы разобрали, что такое протокол удалённого управления компьютером и как работает SSH . Знание основ работы этого протокола — незаменимый навык в работе системного администратора и программиста. SSH позволяет подключиться к устройству в любой точке мира и при этом иметь те же самые права и возможности, что и при физической работе с компьютером.
Если вы размещаете в интернете сайт, при этом используете для этого выделенный сервер, то неправильная конфигурация SSH — угроза проникновения злоумышленников в систему, что может привести к непоправимым последствиям.
Любой сервер, который вы арендуете на cloud.timeweb.com , будет доступен по SSH по умолчанию. А если вам необходимо дополнительно его настроить, наши специалисты всегда на связи.