SSH. Протокол удалённого администрирования.

Общие сведения

SSH (от англ. “Secure Shell”) — это протокол удаленного администрирования, разработанный для осуществления удаленного управления операционными системами и туннелирования TCP-соединения. Использование этого протокола допускает использование разных алгоритмов шифрования, что позволяет безопасно работать практически в любой незащищенной среде: работать с ПК через командную оболочку, передавать по шифрованному каналу любой тип данных (например, видео- и аудиофайлы). Также существует SSH-туннель — это туннель, создаваемый посредством SSH-соединения и используемый для шифрования туннелированных данных. Используется для того, чтобы обезопасить передачу данных в Интернете. При пересылке через SSH-туннель незашифрованный трафик любого протокола шифруется на одном конце SSH-соединения и расшифровывается на другом.

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

Рассмотрим принцип действия SSH. Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удалённую машину и выполнения команд. Аутентификация происходит обычно с помощью ключа (иногда пароля, но ключ безопаснее) Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются и происходит "вход" (или же его не происходит). Авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом. Свой ключ можно сгенерировать с помощью команды ssh-keygen.

Преимущества использования SSH

Использование SSH подключения имеет ряд преимуществ:

  • Безопасная работа на удаленном ПК с использованием командной оболочки;
  • Использование разных алгоритмов шифрования (симметричного, асимметричного и хеширования);
  • Возможность безопасного использования любого сетевого протокола, что позволяет передавать по защищенному каналу файлы любого размера.

Работа с ключами

Как было сказано выше, "рукопожатие" происходит с помощью сравнения частей ключа. Рассмотрим, каким образом с ключами можно работать. * ssh-keygen - генерация ключа (затем будет предложено выбрать путь файла, куда будут помещены ключи) Генерируется два ключа - открытый и закрытый, оба хранятся в разных файлах. Далее следует скопировать открытый ключ на сервер в файл ~/.ssh/authorized_keys. Таким образом сервер "узнаёт" ключ. Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу сервера (закрытому). Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Если вдруг вам понадобилось удалить ключ сервера, можно воспользоваться командой ssh-keygen -R server.

Основные команды

Существуют различные программные пакеты для всех Unix-подобных систем. Для OS Linux имеется свой набор программ (сервер+клиент), обеспечивающий работу по SSH - lsh и openssh. Рассмотрим базовые примеры команд:

  • ls - Показать содержимое каталога (список названий файлов)
  • cd - Сменить каталог
  • mkdir - Создать новую папку (каталог)
  • touch - Создать новый файл
  • rm - Удалить файл
  • cat - Показать содержимое файла
  • pwd - Показать текущий каталог (полный путь к этому каталогу)
  • cp - Копировать файл/папку
  • mv - Переместить файл/папку
  • grep - Поиск конкретной фразы в файле
  • find - Поиск файлов и папок
  • vi и nano - Текстовые редакторы
  • history - Показать 50 последних использованных команд
  • clear - Очистить окно терминала.

SSH-туннелирование и проброс портов

Если требуется подсоединиться к компьютеру внутри локальной сети, но прямое подключение невозможно, можно подключиться через соседний компьютер пробросом портов через SSH-туннель. Рассмотрим два случая:

1) *Проброс удаленного порта на локальную машину* Здесь наша цель будет получить доступ до веб-сервера в удаленной сети <web-host> (к которому доступа напрямую нет), при этом есть доступ по ssh к хосту <ssh-host>, который имеет доступ до веб-сервера. Это можно сделать командой ssh -L 8081:<web-host>:80 user@<ssh-host>. Команду необходимо выполнять от пользователя root, после чего будет доступен на локальном компьютере по адресу http://localhost:8081

2) *Проброс локального порта или доступного нам по сети на удаленную машину* А тут необходимо удаленному хосту <ssh-host> доступному по ssh, открыть доступ до веб-сервера <web-host> который нам доступен. Это можно сделать командой ssh -R 8081:<web-host>:80 user@<ssh-host>. После этого на удаленном хосте <ssh-host> будет доступ до веб-сервера <web-host> по адресу http://localhost:8081.