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.