В интернете часто встречаются инструкции по настройке и использованию SSH. В большинстве своем эти инструкции описывают только установку сервера/клиента и подключение клиента к серверу, иногда даже с использованием пар ключей. В итоге создается ложное впечатление, что на этом область применения SSH и заканчивается. В этой статье я хочу рассказать о возможностях SSH более подробно, используя примеры, которые помогут осознать могущество данного протокола.
Все ниже приведенное будет относиться к серверу и клиенту OpenSSH, которые стали стандартом де-факто для nix систем.Все примеры будут приведены по отношению к Debian, но с легким тюнингом все это можно без проблем использовать на любой nix машине, включая Mac.
Для начала установим сервер и клиент:
|
|
После установки все работает из коробки, можно проверить подключение командой
|
|
Поговорим о важных параметрах настройки сервера SSH.
|
|
ListenAddress — можем ограничить IP, которые будет слушать сервер.
Port — по умолчанию 22, я люблю вешать на 443, так как часто пользуюсь SSH из публичных мест, где 22 порт частенько зарезан.
LoginGraceTime — время ожидания ввода логина-пароля, после чего сеанс будет завершен.
PermitRootLogin — Разрешать ли логиниться пользователю root. Естественно ставим no.
Остальные параметры обычно имеет смысл менять только если есть нетривиальные задачи по использованию.
Итак, сохраняем конфигурацию и перезагружаем сервер
|
|
Следуя канонам стандартных инструкций по SSH, опишу подключение с помощью пар ключей, что избавит нас от необходимости авторизации через пароль, что в свою очередь даст возможность эффективного использования в скриптах и тому подобном. Для начала на клиенте необходимо создать пару ключей. Для этого выполним команду:
|
|
Без параметров она сделает все, как надо. Не забудьте указать passphrase, все-таки секьюр он такой секьюр.
Программа сгенерирует два файла:
~/.ssh/id_rsa.pub — Открытый ключ, передающийся на хост назначения.
~/.ssh/id_rsa — Закрытый ключ. Его никогда и никуда передавать не надо.
Берем содержимое pub и сохраняем в файл на сервере ~/.ssh/authorized_keys каталога пользователя, под которым хотим ходить на сервер.
После этого можем заходить на сервер простой командой
|
|
Итак, я выполнил обязательную программу подобных туториалов, теперь поговорим о более интересных вещах. Что-же умеет SSH? Да все! Многое. Ниже приведу список того, для чего можно использовать SSH. Список не полный, всегда есть простор для творчества.
- Алиасы, очень удобная фича, редко кто использует, а зря.
- Передача файлов. Про это некоторые даже знают.
- Удаленный запуск программ
- Форвардинг X сервера
- Socks Proxy
Поговорим подробнее о этих фичах.
- Алиасы.
Представим себе, что у нас 20 серверов, на которые хотим ходить. Ну и ленивы мы в меру. Куда приятнее ходить по SSH используя команду
|
|
чем например
|
|
Для этого создадим файл ~/.ssh/config
Вот пример его содержания:
|
|
И т.д. Поддерживаемые команды можно изучить в man ssh_config. Так-же стоит отметить, что можно использовать этот файл для определения настроек по умолчанию:
|
|
Конечно, можно определить их в /etc/ssh/sshd_config, но в этом случае они будут применяться для всех пользователей, что не всегда удобно.
Передача файлов.
Есть такой замечательный инструмент — scp. Кстати алиасы для SSH сильно упрощают работу с ним. Проверено.
Синтаксис крайне прост:
Передадим файл на сервер
|
|
Заберем файл с сервера
|
|
Удаленный запуск программ.
Крайне полезная и приятная вещь — выполнить удаленную команду и закрыть соединение.
Например:
|
|
Если приложению требуется управляющий терминал, просто добавим ключ -t
Хотим сохранить вывод удаленной команды в локальный файл? Элементарно:
|
|
Все описанное далее — шаманство в понимании большинства, но мы админы — шаманство наш конек. Так что поехали.
Форвардинг X сервера.
Предположим у нас есть рабочая станция с иксами, мы хотим приконнектиться по ssh к некоему гейту и с него зайти на RDP. Нет ничего проще:
|
|
При этом, в отличие от RDP, траффик зашифрован и может отлично жаться SSH.
Используя алиасы, можно упростить ввод:
~/.ssh/config
|
|
Далее простая команда
|
|
Кстати никто не мешает так-же загнать ее в алиас никсов.
|
|
После этого просто пишем
|
|
и бинго.
Socks Proxy.
Итак, мы перешли к пункту, из-за которого я так любою вешать сервер на порт 443. Представим себе, что мы в европейской (или еще актуальнее — азиатской) гостинице, в которой естественно закрыт 22 порт, да и многие другие тоже.
443 порт оказывается очень удобен в нашей ситуации. А Socks Proxy позволит не опасаться перехвата данных непонятным хотспотом. Кстати ничто не мешает нашему серверу слушать сразу два порта, для этого в конфигурацию сервера впишем следующее:
|
|
Помимо секьюра и прочих приятностей, есть еще одна — возможность компрессии у ssh, что иногда очень актуально при использовании публичных сетей.
Итак, введем команду проброса:
|
|
После запуска остается лишь настроить наши приложения, которые мы хотим пускать по ssh, на socks-proxy localhost по порту 8080.
В общем и целом написал все, что хотел. Спасибо за внимание. Ciao.
Смотрите также
- Как добавить постоянные статические маршруты (persistent static routes) в Mac OS X.
- Знакомство с CMake. Часть 3. CMakeCache, модули CMake, зависимости сборки.
- maybe? Интересная песочница для отладки операций с файлами в скриптах Linux.
- Знакомство с CMake. Часть 2. Переменные, условия, сообщения, опции.
- Знакомство с CMake. Часть 1. Установка, CMakeLists.txt, сборка.