Бортовой журнал
Бортовой журнал

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

Что такое SSH 

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

Сейчас это стандарт для безопасной работы с удаленными системами, который пришел на смену устаревшим и небезопасным способам удаленного доступа — например, Telnet.

Краткая история SSH

SSH появился в 1995 году — его создал финский разработчик Тату Илонен, чтобы решить проблемы безопасности, с которыми сталкивались пользователи Telnet и FTP. Первая версия, SSH-1, быстро завоевала популярность, ведь она позволяла передавать данные по сети в зашифрованном виде.

Уже в 1996 году компания SSH Communications Security выпустила коммерческую версию SSH-1, и этот протокол стал стандартом для удаленного доступа в корпоративной среде.

Однако со временем в SSH-1 нашли уязвимости, и в 1998 году Тату Илонен представил улучшенную версию — SSH-2. Она стала надежнее, безопаснее и именно ее сегодня используют почти все серверы и клиенты по всему миру.

Для чего нужен SSH 

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

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

Чаще всего SSH используют для:

  • удаленного управления серверами и разными устройствами;
  • безопасной передачи файлов — например, через программы scp или sftp;
  • защищенного доступа к внутренним ресурсам компании через специальные туннели;
  • выполнения различных задач на сервере.

Принцип работы SSH 

SSH использует клиент-серверную модель, чтобы две удаленные системы могли безопасно установить соединение и аутентифицировать друг друга. По умолчанию SSH работает на TCP-порту 22, но при необходимости его можно изменить. Сервер слушает входящие подключения именно на этом порту и организует безопасное соединение, проверяя подлинность клиента. 

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

  1. Вы запускаете команду SSH и указываете, к какому серверу хотите подключиться и под каким пользователем. 
  2. Сервер отправляет клиенту свой публичный ключ. 
  3. Клиент использует его, чтобы зашифровать случайный сеансовый ключ, и отправляет его обратно серверу. 
  4. Сервер расшифровывает его с помощью своего закрытого ключа. Теперь оба участника знают этот сеансовый ключ — он используется для шифрования всех дальнейших взаимодействий.
  5. С этого момента все ваши команды, передаваемые файлы и вообще любые данные надежно зашифрованы. Даже если кто-то перехватит трафик, он увидит лишь набор бессмысленных символов.
  6. В большинстве случаев для входа требуется пароль. Когда вы его вводите, он тоже передается по зашифрованному каналу, так что никто не сможет его подсмотреть.
  7. Если все прошло успешно, вы получаете доступ к командной строке удаленного сервера.

Варианты использования SSH

  • Удаленное администрирование серверов. SSH чаще всего используется для управления серверами на расстоянии. Можно подключиться к серверу из любой точки мира, выполнять команды, настраивать программы, перезагружать службы и решать любые задачи, как будто вы работаете прямо за этим компьютером.
  • Безопасная передача файлов. SSH позволяет безопасно пересылать файлы между компьютерами. Если нужно скопировать резервные копии, логи или любые другие документы, не опасаясь, что кто-то перехватит или подменит файлы по дороге, — это ваш вариант. 
  • Удаленный запуск графических приложений. С помощью SSH можно запускать графические программы на удаленном сервере и выводить их на свой экран, не устанавливая эти программы у себя. Это полезно для тяжелых или специализированных приложений, которые не получается установить локально.
  • Перенаправление портов для доступа к закрытым сервисам. SSH помогает получить доступ к сервисам, которые недоступны напрямую из интернета. Можно создать защищенный туннель и через него попасть, например, в закрытую базу данных или внутренний веб-интерфейс.
  • Шифрованные туннели для защищенной связи. С помощью SSH можно организовать полностью защищенный канал между двумя устройствами. Протокол поможет обмениваться конфиденциальными данными или получать доступ к внутренним ресурсам компании, даже если вы находитесь за пределами корпоративной сети.

Чем SSH отличается от других протоколов для туннелирования

Главное отличие SSH от других протоколов туннелирования — это уровень, на котором они работают в сетевой модели OSI. Протоколы вроде GRE, IP-in-IP и IPsec функционируют на сетевом уровне — они работают с IP-адресами напрямую и не видят порты, которые относятся к транспортному уровню. SSH же чаще относят к прикладному уровню, как HTTP или FTP — то есть он работает с конкретными приложениями и их соединениями.

Еще одно важное отличие — это использование TCP. SSH всегда работает поверх TCP — надежного протокола, который гарантирует доставку данных в правильном порядке. Другие протоколы туннелирования, например IPsec, обычно используют UDP — более быстрый, но куда менее надежный протокол, который не гарантирует доставку всех пакетов. Из-за этого IPsec-туннели могут работать быстрее, но при этом иногда теряют данные. SSH же, наоборот, работает чуть медленнее, зато надежнее.

Также стоит отметить, что SSH защищает и шифрует только трафик одного приложения за раз — например, ваше SSH-подключение или передачу файлов через SCP. В отличие от SSH, IPsec шифрует весь сетевой трафик целиком, независимо от того, какая программа его отправляет. Именно поэтому IPsec часто используют для создания VPN, а SSH — нет.

Локальные файлы настроек SSH

Все ваши личные настройки SSH сохраняются в каталоге ~/.ssh/. Давайте разберем, что за что отвечает:

  • config — главный файл конфигурации клиента. В нем можно заранее прописать параметры подключения к разным серверам: имя пользователя, порт, путь к ключам и другие опции. Благодаря этому при запуске ssh server1 вам не придется каждый раз писать длинную команду — все уже настроено в ~/.ssh/config.
  • authorized_keys — cписок публичных ключей, которым разрешен вход на эту машину под вашим учетным именем. Если вы хотите заходить без пароля, достаточно создать этот файл в ~/.ssh/, добавить туда ваши публичные ключи (id_rsa.pub, id_ed25519.pub и т.д.) — и SSH-сервер (sshd) будет пускать вас по ключу.
  • known_hosts — файл с отпечатками серверных ключей тех хостов, к которым вы уже подключались. При каждом повторном подключении SSH проверяет, совпадает ли текущий ключ с тем, что сохранен в known_hosts. Если ключ изменился и вы не перестраивали сервер сознательно, SSH предупредит об этом — возможно, кто-то пытается выдать себя за настоящий хост.
  • id_* (закрытые ключи) — файлы вида id_rsa, id_ed25519 и так далее содержат ваши приватные ключи. Они генерируются на вашей машине и никогда не покидают ее. Их нужно хранить в секрете: передать приватный ключ кому-либо — это как выдать пароль. Вы можете защитить ключ дополнительным паролем-фразой — тогда даже если файл попадет в чужие руки, без пароля он бесполезен.
  • id_*.pub (публичные ключи) — файлы с расширением .pub содержат открытые части ваших ключей. Их можно свободно копировать на любые серверы в файл authorized_keys, чтобы SSH-серверы распознавали вас и пускали без пароля.

Как установить SSH 

На большинстве современных Linux и macOS SSH уже установлен по умолчанию. Но если его вдруг нет — добавить SSH несложно. 

Linux

Если вы хотите настроить SSH-сервер — то есть подключаться к этому компьютеру удаленно, — выполните в терминале:

sudo apt update

sudo apt install openssh-server

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

sudo systemctl status ssh

Если вы просто хотите подключаться к другим машинам как клиент, достаточно установить только клиент:

sudo apt install openssh-client

Windows

В Windows 10 и более свежих версиях SSH уже встроен, его просто нужно включить:

  1. Откройте меню «Пуск» → «Настройки» → «Приложения» → «Дополнительные компоненты».
  2. Нажмите «Добавить компонент».
  3. Найдите OpenSSH Client (и при необходимости OpenSSH Server).
  4. Установите их.

Если вам удобнее работать с привычным интерфейсом:

  1. Скачайте и установите программу PuTTY. 
  2. После запуска просто введите IP-адрес сервера и порт — как правило, 22.
  3. Нажмите Open — откроется окно для подключения.

macOS

На компьютерах Mac SSH уже предустановлен. Достаточно открыть «Терминал» и ввести команду:

ssh

Если в выводе вы увидите подсказки или список опций — значит, SSH готов к работе.

Как подключиться к серверу по SSH

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

  • IP-адрес или доменное имя сервера (например, 111.2.333.4 или server.example.ru);
  • имя пользователя на сервере (обычно это admin, root или ваш личный логин);
  • порт для подключения (по умолчанию 22, но администраторы иногда меняют его для безопасности);
  • ваш пароль или заранее настроенный SSH-ключ.

Самый простой способ подключиться к серверу по SSH — использовать команду:

ssh username@server_ip

Например:

ssh admin@111.2.333.4

Вас попросят ввести пароль — введите его, и, если все правильно, окажетесь на удаленном сервере.

Если сервер работает на нестандартном порте, добавьте флаг -p:

ssh -p 2222 user@server.example.ru

Если вы заранее настроили авторизацию по ключу (а это самый безопасный вариант), используйте команду:

ssh -i ~/.ssh/your_private_key user@server_ip

Где параметр -i указывает путь к приватному ключу.

При первом подключении SSH спросит, доверяете ли вы этому серверу:

The authenticity of host 111.2.333.4 (111.2.333.4)' can't be established. Are you sure you want to continue connecting (yes/no)?

Введите yes. После этого SSH запомнит ключ сервера и в будущем предупредит, если он вдруг изменится — это важно для защиты от подмены сервера.

Как сгенерировать SSH-ключи

SSH-ключи позволяют подключаться к серверу без пароля — они надежнее и удобнее, чем обычная авторизация. Ключ состоит из двух частей: приватной (ее храните только вы) и публичной (ее копируют на сервер).

Linux и macOS

  1. Откройте терминал.
  2. Введите команду:

ssh-keygen -t rsa

  1. Вас спросят, куда сохранить ключ. Просто нажмите Enter, чтобы оставить путь по умолчанию (/home/username/.ssh/id_rsa).
  2. Далее система предложит ввести кодовую фразу для защиты ключа. Можете оставить поле пустым (нажмите Enter), или придумать пароль, чтобы в случае кражи файла ваш ключ был бесполезен без пароля.
  3. После завершения появится сообщение о том, что ключи созданы:

Your identification has been saved in /home/username/.ssh/id_rsa.

Your public key has been saved in /home/username/.ssh/id_rsa.pub.

Приватный ключ — id_rsa, публичный — id_rsa.pub.

  1. Чтобы посмотреть публичный ключ и скопировать его на сервер, выполните:

cat ~/.ssh/id_rsa.pub

  1. Скопируйте получившуюся длинную строку и добавьте ее в файл ~/.ssh/authorized_keys на сервере.

Windows

На Windows все немного иначе — здесь чаще используют программу PuTTY:

  1. Скачайте архив с официального сайта и распакуйте его (устанавливать не нужно).
  2. Запустите puttygen.exe.
  3. Выберите тип ключа (например, SSH-2 RSA) и длину 2048 бит.
  4. Нажмите кнопку Generate. Важно: во время генерации поводите мышкой в пустом поле — это простое действие поможет создать по-настоящему случайный ключ.
  5. Когда ключ будет готов, сохраните публичный и приватный ключи с помощью кнопок Save public key и Save private key.
  6. Скопируйте сгенерированный публичный ключ из окна программы и добавьте его на сервер в файл authorized_keys.

Основные команды для работы с SSH 

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

Команда

Назначение

ssh user@host

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

ssh -p PORT user@host

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

ssh-keygen

Генерация пары ключей: публичного и приватного

ssh-copy-id user@host

Отправка вашего публичного ключа на сервер для входа без пароля

scp file user@host:/path

Копирование файлов между локальной машиной и сервером

sftp user@host

Интерактивная передача файлов (безопасный аналог FTP через SSH)

~/.ssh/config

Файл конфигурации для хранения настроек подключения, псевдонимов, портов

ssh-agent

Запускает фоновый процесс для хранения приватных ключей в памяти

ssh-add ~/.ssh/id_rsa

Добавляет приватный ключ в ssh-agent, чтобы не вводить пароль при каждом подключении

exit

Завершение SSH-сессии и выход с сервера

Заключение

Давайте коротко вспомним, что важно знать про SSH:

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

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