Иногда необходимо иметь возможность удалённо управлять какими-то системами, которые находятся за firewall'ами,
которые Вы не контролируете. В таких случаях помогают ssh-тунели с использованием перенаправления
(forwarding) портов. Например, допустим имеется удалённая машина trick, которая находится за маршрутизатором
в удалённой локальной сети, и вторая машина rose имеющая внешний ip-адрес. Для того, чтобы иметь
возможность с rose заходить на trick (либо использовать какой-то сервис на trick), необходимо поднять
туннель с использованием перенаправления удаленных портов (remote port forwarding): ssh -f -N username@rose -R 3722:127.0.0.1:22
Получаем такую картину: на rose в списке открытых портов появляется порт 3722, который на самом деле
перенаправляет все пакеты на 22-й порт trick-системы. После этого можно логиниться через ssh на trick из rose:
ssh username@127.0.0.0 -p 3722
А что делать, чтобы тунели были постоянно доступны? Ведь ssh-соединения бывают рвутся
и тогда опять необходимо с trick-системы инициировать тунель. А если trick находится в 100 км от Вас?
А если их таких у Вас 20? :) Вот тут-то и помогает замечательная вещь - autossh, утилитка занимающаяся тем,
что поддерживает поднятые ssh-туннели в рабочем состоянии. Перед её запуском необходимо установить
переменную AUTOSSH_PORT, указывающую номер порта, который будет использоваться для heartbeat-пакетов
на предмет того - жив ли тунель.
Также, если туннели необходимо поднимать во время старта системы, советуют установить переменную
AUTOSSH_GATETIME=0. Переменная AUTOSSH_DEBUG позволит получить из логов дополнительную информацию о ходе процесса.
export AUTOSSH_DEBUG=1
export AUTOSSH_GATETIME=0
export AUTOSSH_PORT=20037
autossh -f -N username@rose -R 3722:127.0.0.1:22
Без ключа -f программа не отправляется в фон, поэтому данный режим полезен, чтобы разбираться с проблемами
при установке туннеля, если они возникают.
В приведенном выше примере кроме портов rose:3722 и trick:22 поднимается ещё 3 дополнительных
(так как установлена переменная AUTOSSH_PORT) - trick:20037, rose:20037, trick:20038, связанных
между собой в цепочку для прохождения heartbeat-пакета. Таким образом, что отправляя запрос
на trick:20037, пакет приходит на rose:20037, который в свою очередь перенаправляет его дальше на trick:20038.
Получается своеобразный "бумеранг", позволяющий следить за туннелем.
URL: http://blog.sozinov.eu/2009/08/autossh.html http://linux.com/archive/feature/134133
Обсуждается: http://www.opennet.dev/tips/info/2157.shtml