Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как пользоваться SSH

Никита Кулижников
Никита Кулижников
Технический писатель
18 мая 2022 г.
4097
9 минут чтения
Средний рейтинг статьи: 5

New Documentation

Что такое SSH?

Представим, что вы арендовали облачный сервер на timeweb.cloud для того, чтобы разместить на нем сайт. После покупки вы получите чистую систему, которую предстоит настраивать — устанавливать веб-сервер, загружать файлы и так далее. Для этого не нужно ехать в дата-центр с флешкой, в таких случаях используется протокол SSH.

Как Пользоваться Ssh (1)

SSH (от английского secure shell — защищённая оболочка) — это протокол для удалённого доступа к любым устройствам с операционной системой Linux: компьютерам, серверам, телефонам и так далее. Иными словами, это некий набор правил, позволяющий устанавливать соединение с устройством, которое физически расположено в любой точке мира. 

Слово secure в названии протокола значит, что обмен данными между устройствами шифруется, а значит вы можете работать с чувствительной информацией — паролями, кодами доступа и так далее. 

Image3

Информация передаётся в зашифрованном виде, таким образом повышается безопасность обмена данными, с которыми вы работаете. Соединение и аутентификация осуществляются одним из двух способов:

  • Вход по паролю. Между клиентом и сервером создаётся общий секретный ключ, с его помощью шифруется трафик.
  • Вход с помощью пары ключей. Перед первым соединением пользователь генерирует два ключа: открытый и закрытый. Они хранятся на удалённом и локальном устройствах соответственно. 

В статье рассмотрим возможности протокола, синтаксис SSH-команд и настройки демона SSH. 

Вход в систему с помощью ключей

Использовать пароль входа на сервер по протоколу SSH — небезопасно и неудобно. Во-первых, пароль можно подобрать перебором. Во-вторых, может произойти случайная утечка, ведь устройств может быть несколько, а значит и пароли разные, все не запомнить. А в-третьих, это утомительно — каждый раз вводить кодовое слово перед началом сеанса. 

Самый надёжный способ — входить в систему с помощью пары ключей RSA. 

Сначала нужно создать ключи на локальном компьютере:

ssh-keygen -t rsa

Image1

В процессе создания вам нужно будет выбрать расположение файлов ключей и кодовое слово. Если хотите подключаться без пароля, оставляйте поле Passphrase пустым. Passphrase — это кодовое слово, которым дополнительно защищается ключ. Так, если ваш приватный ключ будет скомпрометирован, злоумышленники не смогут им воспользоваться без кодового слова.

Затем нужно отправить на сервер публичный ключ; на его публичность указывает суффикс .pub и права на чтение для всех пользователей:

ssh-copy-id -p 222 -i ~/.ssh/id_rsa.pub remote@example.com

Команда создаст сеанс SSH. После введения пароля публичный ключ будет скопирован в файл авторизованных ключей, и вам больше не понадобится вводить пароль.

Вы можете ещё больше увеличить безопасность, полностью отключив доступ по паролю. Для этого отредактируйте файл /etc/ssh/sshd_config, выставив следующие директивы:

  1. PasswordAuthentication no — запрещаем вход с паролем.
  2. PubkeyAuthentication yes — разрешаем аутентификацию по ключам SSH. 
  3. ChallengeResponseAuthentication no — отключаем PAM-аутентификацию

После обновления файла перезагружаем демон SSH:

sudo systemctl reload ssh

Настройка SSH

Чтобы выполнить подключение, на удалённом устройстве должен быть запущен сервер sshd, в Ubuntu он запускается с помощью диспетчера systemd:

sudo systemctl start ssh

Конфигурация сервера sshd находится в файле /etc/ssh/sshd_config. Рассмотрим основные параметры настройки SSH, которые вы можете использовать. 

Image2

Порт. По умолчанию sshd отслеживает изменения на 22 порту. Часто злоумышленники пытаются получить доступ к вашему устройству перебором паролей от суперпользователей — root, admin и так далее. Можно усложнить эту задачу и изменить стандартный порт на любой другой с помощью директивы Port.

Однако это не гарантирует полную безопасность, так как существуют скрипты, сканирующие порты устройства. Они определят порт, который «слушает» демон sshd, и всё равно попытаются заполучить доступ. Для большей безопасности рекомендуем закрыть SSH для root-пользователя.

Доступ суперпользователя. Поскольку в основном SSH используется для администрирования удаленных серверов Linux, по умолчанию во всех современных системах удалённый доступ суперпользователя root разрешён. Но это очень небезопасно, так как злоумышленники могут попытаться подобрать пароль и, если смогут попасть в систему, получат полный контроль над устройством. Для того, чтобы избежать таких сценариев, используйте директиву PermitRootLogin со значением no

Протокол. SSH может работать по двум версиям протокола — 1 и 2. Вторая поддерживает больше методов шифрования и способов аутентификации. Если вы хотите использовать только одну из версий, используйте директиву Protocol: Protocol 2.

Доступ только нескольким пользователям. Ещё больше увеличивает безопасность разрешение удалённого доступа только для определённых пользователей и групп — директивы AllowUsers и AllowGroups соответственно. Так, мы можем запретить доступ к серверу всем, кроме администраторов:

AllowUsers adm1, adm2

или 

AllowGroups admin, infrastructure

Вы также можете запретить доступ конкретным пользователям с помощью DenyUsers и DenyGroups

Сохранение ошибок. Уровень логгирования можно задать с помощью директивы LogLevel. Она отвечает за уровень наполнения системного журнала, то есть насколько подробно sshd будет будет сохранять сообщения, которые регистрирует. По умолчанию используется INFO, но в отладочных целях можно поставить VERBOSE или вовсе отключить журналирование QUIET.

Доступ по паролю. За возможность попасть на удалённое устройство с помощью пароля отвечает директива PasswordAuthentication со значениями yes (по умолчанию) или no.

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

sudo systemctl reload ssh

SSH-клиенты

На Windows-системах вы также можете использовать SSH для подключения к удалённому серверу с помощью специальных приложений. Они удобны тем, что позволяют запомнить данные для подключения или указать разные цветовые схемы для разных сеансов (полезно, когда вы администрируете несколько серверов). Среди наиболее популярных:

  1. PuTTY
  2. WinSCP
  3. Termius
  4. FileZilla — для передачи данных по SFTP
  5. MobaXterm

Если вы работаете в unix-системах, можно использовать простой терминал или командную строку.

Синтаксис

Для удалённого подключения нужно использовать команду SSH с указанием IP-адреса или доменного имени сервера:

ssh example.com

В примере выше предполагается, что имена пользователей в локальной и удалённой системах совпадают. Чаще всего это не так, поэтому приходится отдельно указывать, какое имя использовать при подключении:

ssh remote@example.com

Завершить сеанс можно с помощью команды exit.

Если при настройке удалённого сервера вы указали порт отличный от 22, то на локальном устройстве вам нужно указать его при подключении, сделать это можно с помощью флага -p:

ssh -p 222 remote@example.com

Сценарии использования

Ниже рассмотрим частые и наиболее интересные сценарии использования протокола SSH.

Передача файлов и каталогов

Если на вашем сервере настроен демон sshd, вы также можете пользоваться другими утилитами, которые работают на основе протокола SSH. Одна из таких утилит — scp, которая использует протокол RCP для передачи файлов. 

Для того, чтобы передать файл filename.txt на устройство с адресом example.com и расположить его в каталоге ~/trash/txt, используйте следующую команду:

scp filename.txt remote@example.com:~/trash/txt

Если поменять местами локальный путь и сервер, то вы сможете забрать себе на локальное устройство файлы с удалённого сервера. 

Когда нужно передать весь каталог, добавьте флаг -r. При путь к каталогу, в который вы собираетесь копировать данные, должен завершаться косой чертой. 

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

scp -r remote@example.com:~/images ~/documents/

Вы также можете передавать файлы между двумя удалёнными машинами, указывая вместо локальных файлов путь подключения к серверу. 

SSH-туннели

Туннели через SSH позволяют устанавливать безопасный удалённый доступ и передавать файлы по защищённой сети. Чаще всего всего они применяются в случае, когда нужно получить доступ в частную сеть или создать зашифрованный канал.

Для того, чтобы пробросить порт с удалённого сервера, используйте флаг -L. Для примера рассмотрим случай, когда нам нужно разрешить работу с удалённой базой данных, которая доступна только на локальной машине, порт 3306. 

Для этого выполним следующую команду:

ssh -N 53306:127.0.0.1:3306 remote@example.com

В этой команде флаг -N означает, что на удалённой машине не нужно выполнять команду, 53306 — локальный порт, 127.0.0.1:3306 — адрес, на котором работает сервис MySQL на удалённом сервере.

Подробнее об SSH-туннелях читайте в нашей статье.

SFTP

SFTP (Secure File Transfer Protocol) — протокол передачи файлов, который работает поверх безопасного канала и является частью OpenSSH, поэтому если у вас корректно работает демон SSH, вы можете использовать SFTP без дополнительной настройки. Главное отличие SFTP от стандартного протокола FTP — шифрование абсолютно любой информации.

Создать сеанс SFTP можно с теми же доступами — логином и паролем или ключом — что и SSH. Кроме этого можно указать порт, если вы меняли его со стандартного 22 на какой-либо другой. Сделайте это с помощью команды:

sftp -oPort=222 remote@example.com

После успешной аутентификации вы окажетесь на удалённом сервере и сможете работать с файлами. 

Заключение

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

Если вы размещаете в интернете сайт, при этом используете для этого выделенный сервер, то неправильная конфигурация SSH — угроза проникновения злоумышленников в систему, что может привести к непоправимым последствиям.

Любой сервер, который вы арендуете на timeweb.cloud, будет доступен по SSH по умолчанию. А если вам необходимо дополнительно его настроить, наши специалисты всегда на связи.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону