Если вы только начинаете знакомиться с удаленным управлением серверами и слышали про 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, но при необходимости его можно изменить. Сервер слушает входящие подключения именно на этом порту и организует безопасное соединение, проверяя подлинность клиента.
Процесс подключения выглядит примерно так:
- Вы запускаете команду SSH и указываете, к какому серверу хотите подключиться и под каким пользователем.
- Сервер отправляет клиенту свой публичный ключ.
- Клиент использует его, чтобы зашифровать случайный сеансовый ключ, и отправляет его обратно серверу.
- Сервер расшифровывает его с помощью своего закрытого ключа. Теперь оба участника знают этот сеансовый ключ — он используется для шифрования всех дальнейших взаимодействий.
- С этого момента все ваши команды, передаваемые файлы и вообще любые данные надежно зашифрованы. Даже если кто-то перехватит трафик, он увидит лишь набор бессмысленных символов.
- В большинстве случаев для входа требуется пароль. Когда вы его вводите, он тоже передается по зашифрованному каналу, так что никто не сможет его подсмотреть.
- Если все прошло успешно, вы получаете доступ к командной строке удаленного сервера.
Варианты использования 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 уже встроен, его просто нужно включить:
- Откройте меню «Пуск» → «Настройки» → «Приложения» → «Дополнительные компоненты».
- Нажмите «Добавить компонент».
- Найдите OpenSSH Client (и при необходимости OpenSSH Server).
- Установите их.
Если вам удобнее работать с привычным интерфейсом:
- Скачайте и установите программу PuTTY.
- После запуска просто введите IP-адрес сервера и порт — как правило, 22.
- Нажмите 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
- Откройте терминал.
- Введите команду:
ssh-keygen -t rsa
- Вас спросят, куда сохранить ключ. Просто нажмите Enter, чтобы оставить путь по умолчанию (/home/username/.ssh/id_rsa).
- Далее система предложит ввести кодовую фразу для защиты ключа. Можете оставить поле пустым (нажмите Enter), или придумать пароль, чтобы в случае кражи файла ваш ключ был бесполезен без пароля.
- После завершения появится сообщение о том, что ключи созданы:
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.
- Чтобы посмотреть публичный ключ и скопировать его на сервер, выполните:
cat ~/.ssh/id_rsa.pub
- Скопируйте получившуюся длинную строку и добавьте ее в файл ~/.ssh/authorized_keys на сервере.
Windows
На Windows все немного иначе — здесь чаще используют программу PuTTY:
- Скачайте архив с официального сайта и распакуйте его (устанавливать не нужно).
- Запустите puttygen.exe.
- Выберите тип ключа (например, SSH-2 RSA) и длину 2048 бит.
- Нажмите кнопку Generate. Важно: во время генерации поводите мышкой в пустом поле — это простое действие поможет создать по-настоящему случайный ключ.
- Когда ключ будет готов, сохраните публичный и приватный ключи с помощью кнопок Save public key и Save private key.
- Скопируйте сгенерированный публичный ключ из окна программы и добавьте его на сервер в файл 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.