open-source-opensshВ интернете часто встречаются инструкции по настройке и использованию 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

Поговорим подробнее о этих фичах.

1. Алиасы.

Представим себе, что у нас 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.