Управлять другими компьютерами можно удалённо. Для этого обе системы должны уметь использовать одни и те же наборы правил, которые называются сетевыми протоколами. Почему для этого до сих пор используют технологию из 1995 года — хороший вопрос. Отвечаем с подробностями.
Что такое SSH?
Чтобы лучше понять, что такое SSH-подключение, сначала надо кое-что вспомнить.
Протокол — это набор правил, которым следует программа или компьютер, чтобы получить какой-то финальный результат. Например, установить защищённое соединение с другой машиной или передать ключ для шифрования данных.
Есть ещё инструменты для выполнения протокола, которые его реализуют. Иногда их могут называть так же, как сам протокол. Работает это так: чтобы подключиться к другому компьютеру, нужно куда-то ввести команду, или нажать кнопку, или запустить программу. То, где мы это делаем, и будет инструментом выполнения протокола.
SSH, или Secure Shell, — сетевой протокол, который позволяет установить защищённое подключение между двумя машинами. Про него сегодня и поговорим.
Для чего нужен SSH
Кроме работы с репозиториями кода, с помощью SSH можно управлять работой одного компьютера через другой, настраивать работу, управлять работой в облаках и добавлять и удалять файлы. Это удобно, потому что SSH шифрует все данные и делает управление системой и обмен информацией безопасными.
Как работает SSH-подключение
Подключение по SSH устанавливает клиент — машина, с которой нужно удалённо управлять другой машиной.
Любой сетевой протокол между двумя точками работает примерно одинаково:
- Клиент устанавливает соединение со второй машиной, сервером. Для этого клиент отправляет запрос на адрес сервера.
- Клиент проходит аутентификацию — говорит, кто он, и даёт доказательства своей личности. В процессе аутентификации обычно используются логин, пароль или ключи шифрования.
- Клиент и сервер договариваются, как будут обмениваться данными — в каком формате будет информация, как она будет разбиваться на пакеты, как шифроваться.
- По установленным правилам проходит сеанс связи — обе системы передают друг другу все данные, которыми нужно было обменяться. Как конкретно это происходит, зависит от протокола — например, в одном варианте информация зашифрована, а в другом передаётся в открытом виде.
- После обмена один из компьютеров закрывает соединение, второй говорит: «Ну, до скорого» — и тоже отключается до следующего раза.
Принцип работы SSH
Основной принцип работы SSH — использование шифрования.
Сначала одна из машин создаёт два связанных между собой SSH-ключа — открытый и закрытый. То, что зашифровано открытым ключом, может быть расшифровано только закрытым — это правило асимметричного шифрования, про это у нас есть отдельная статья. При установке соединения клиент отправляет открытый ключ на сервер, потому что этим ключом можно делиться с кем угодно, он только для зашифровывания.
Сервер шифрует открытым ключом небольшую часть данных и отдаёт данные клиенту. Клиент должен расшифровать это сообщение и отдать обратно в открытом виде. Так сервер поймёт, что публичный ключ действительно был создан клиентом.
После этого обе стороны используют алгоритм для обмена секретным ключом: это может быть алгоритм Диффи — Хеллмана или его более современные аналоги.
Когда у клиента и сервера есть секретный ключ, они могут обмениваться данными и не бояться, что эти данные сможет прочесть кто-то третий.
Получается, что мы используем SSH-ключи только при аутентификации. На это есть две главные причины: во-первых, алгоритмы для обмена данными по секретному ключу работают гораздо быстрее SSH-алгоритмов, а во-вторых, приватный SSH-ключ есть только у клиента. Если клиент захочет отправить зашифрованное сообщение, сервер не сможет его расшифровать.
В чём разница между SSH и Telnet/FTP?
Главное различие: SSH передаёт данные в зашифрованном виде, а Telnet и FTP — в открытом.
Если информацию по открытым протоколам на середине пути перехватят злоумышленники, все файлы попадут им в том же виде, в котором ими уже можно пользоваться. Если пакеты данных перехватят во время зашифрованной передаче, для расшифровки понадобится приватный ключ. Без него использовать информацию будет невозможно.
Подключение по SSH в разных системах
Протокол работает по одному и тому же принципу везде, но команды и инструменты для работы с ним есть разные. В первую очередь это зависит от операционной системы.
SSH — это инструмент командной строки, поэтому во всех ОС понадобится запустить приложение для работы с ней. В Linux и MacOS это Terminal или iTerm, а в Windows — PowerShell.
Подключение по SSH из Windows
В версиях Windows 10 и новее не нужно ничего дополнительно устанавливать — SSH уже встроен в систему.
Как включить: перейдите в Параметры → Приложения → Дополнительные компоненты. Найдите OpenSSH-клиент и установите его. Если его нет в списке, выберите: Добавить компонент → OpenSSH-клиент → Установить.
Для запуска нужно запустить WIndows PowerShell. Для этого включите стартовое меню и начните вводить Windows или PowerShell:

Использование PuTTy. В более ранних версиях Windows нужно установить дополнительное приложение. Самый популярный вариант — PuTTy:

Альтернативы. PuTTy — классический вариант для windows-систем, но у него устаревший интерфейс и нет встроенной поддержки передачи файлов. Вот что ещё можно использовать.
WinSCP — клиент с графическим интерфейсом для удобной работы с файлами. Если понадобится командная строка, его можно интегрировать с Putty.

https://winscp.net/eng/docs/ui_explorer
Встроенный SSH-клиент в версиях Windows от 10 и новее позволяет работать через командную строку примерно так же, как в Linux и MacOS.
Чтобы включить, откройте PowerShell от имени администратора и проверьте установку:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Если клиент не установлен, его можно добавить так:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Теперь можно подключиться по SSH. Как это делать для всех систем, разбираем дальше.
Подключение по SSH в Linux/Ubuntu
Работать с SSH Linux умеет по умолчанию, в большинство дистрибутивов он уже включён. Проверить установку можно такой командой в терминале:
ssh
Если SSH не установлен, вы увидите сообщение об ошибке. Тогда его можно установить:
sudo apt-get install openssh-client
Подключение по SSH в MaCOS
Операционные системы от Apple поддерживают SSH по умолчанию. Если в терминале ввести команду ssh
, вы увидите такое сообщение:

Подключение к серверу по SSH
Для примера подключимся по SSH к серверу GitHub. Можно связать свой компьютер и репозиторий на облачной платформе через ключи, после этого подключаться по SSH и работать с репозиториями по защищённому протоколу.
Что нужно для подключения?
В общем виде команда для подключения будет выглядеть так:
ssh username@server_ip
Что есть что в этой команде:
ssh
— обозначает название протокола;username
— имя пользователя, которое клиент будет использовать на сервере. GitHub требует использовать для всех SSH-подключений имя пользователяgit
;server_ip
— IP-адрес сервера или доменное имя. Нам нужно github.com.
Ещё нам понадобятся SSH-ключи. В выбранном приложении вводим:
ssh-keygen
Система попросит уточнить место сохранения, имя для ключей и дважды попросит ввести пароль для ключей. Он необязателен, можно просто дважды нажать Enter:

После этого система покажет, что ключи готовы:

Нам нужен публичный ключ. Для этого нужно перейти в папку с ключами, выполнив в консоли команду:
cd .ssh
Теперь нужен текст публичного ключа. Вводим:
cat keys_for_CODE
Содержимое ключа появится в терминале:

Копируем текст этого ключа и идём на GitHub. Заходим во вкладку с SSH-ключами и создаём новый ключ:

Ключу нужно дать любое подходящее имя и вставить скопированный из консоли текст в поле ниже:

Теперь вводим в терминале такую команду:
ssh git@github.com
SSH-сервер должен узнать нас и отправить приветственное сообщение:

Как проверить, работает ли SSH на сервере?
На разных ОС можно проверить статус сервера и отдельно порт 22, на котором этот сервер по умолчанию размещается.
На Linux узнать статус сервера можно такими командами:
systemctl status ssh
service ssh status
Если сервер включён, должно появиться сообщение:
Active: active (running) since …
Для проверки порта 22 введите:
ss -tulnp | grep ssh
netstat -tulnp | grep ssh
Если SSH работает, в выходной команде должно быть 0.0.0.0:22
или :::22
.
На MacOS сервер проверяется так:
sudo systemsetup -getremotelogin
В случае подтверждения ответом будет Remote Login: On
.
А 22-й порт — так:
lsof -i :22
Если выходной ответ в терминале содержит sshd
, значит, сервер слушает порт, то есть проверяет его.
В Windows сервер проверяют командой:
Get-Service -Name sshd | Select-Object Status, StartType
Успешный ответ будет таким:
Status StartType
------ ---------
Running Automatic
22-й порт проверяют такой командой:
Test-NetConnection -ComputerName 127.0.0.1 -Port 22
Если порт открыт, результат будет:
TcpTestSucceeded : True
Настройка SSH-сервера
В разных системах команды для этого немного различаются, но суть одна: вы открываете на машине порт и устанавливаете программу, через которые можно подключиться и управлять системой.
Как установить и запустить SSH-сервер?
Мы разберём по две команды для каждой системы — поднятие сервера и проверку того, как он работает.
Чтобы поднять сервер на Linux, выполняем:
sudo apt update && sudo apt install openssh-server
После этого сервер нужно запустить:
sudo systemctl start ssh
Проверить, всё ли в порядке, можно так:
sudo systemctl status ssh
Результатом последней команды должно быть active (running)
.
Для установки и запуска на MacOS пишем в терминале команду:
sudo systemsetup -setremotelogin on
Для проверки подключаемся к своему же серверу:
ssh localhost
Установка на Windows происходит так:
- Открываем Параметры → Приложения → Дополнительные компоненты.
- Добавляем OpenSSH-сервер.sdf
Для запуска используем PowerShell:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Базовые настройки безопасности
Чтобы злоумышленнику было сложнее найти SSH-сервер, лучше поменять стандартный порт 22 на другой.
Для этого на Linux и MacOS делаем так:
sudo nano /etc/ssh/sshd_config
Меняем порт такой командой (необязательно устанавливать именно такой номер порта, можно выбрать любой доступный):
Port 2222
В Windows файл настройки обычно находится здесь:
C:\ProgramData\ssh\sshd_config
Его можно открыть через PowerShell от имени администратора:
notepad C:\ProgramData\ssh\sshd_config
После этого найдите строку #Port 22
, уберите символ #
в начале и замените на Port 2222
.
После смены порта перезапустите сервер:
- Команда для Linux и MacOS —
sudo systemctl restart ssh
- Команда для Windows —
Restart-Service sshd
Ошибка Connection refused
Если вы видите такое сообщение, причина может быть в следующем:
- SSH-сервер не запущен.
- Брандмауэр блокирует порт.
- Неправильный IP/порт.
Для решения сначала проверьте статус сервера. В Linux/MacOS для этого нужна команда sudo systemctl status ssh
, а в Windows — Get-Service sshd
.
Чтобы разрешить порт в брандмауэре или файерволе, нужно сделать так: в Linux открываем нужный порт и перезагружаем:
sudo ufw allow 2222/tcp
sudo ufw reload
После этого проверяем статус:
sudo ufw status
При успешном результате появится сообщение 2222/tcp ALLOW
.
В MacOS файервол обычно отключён. Чтобы открыть настройки, выполняем команду:
sudo nano /etc/pf.conf
Теперь добавляем новое правило перед anchor "com.apple/*"
:
pass in proto tcp from any to any port 2222
Перезагружаем настройки и включаем файервол:
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
В Windows открываем PowerShell и прописываем команду:
New-NetFirewallRule -DisplayName "SSH (Port 2222)" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
Как проверить, заработало или нет:
Get-NetFirewallRule -DisplayName "SSH*" | Select-Object DisplayName,Enabled
Бонус для читателей
Если вам интересно погрузиться в мир ИТ и при этом немного сэкономить, держите наш промокод на курсы Практикума. Он даст вам скидку при оплате, поможет с льготной ипотекой и даст безлимит на маркетплейсах. Ладно, окей, это просто скидка, без остального, но хорошая.
Вам слово
Приходите к нам в соцсети поделиться своим мнением о статье и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!