Инструменты пользователя

Инструменты сайта


ssh_туннель

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

ssh_туннель [2013/02/10 22:24] (текущий)
192.168.1.164 создано
Строка 1: Строка 1:
 + ​SSH-туннели — пробрасываем порт
 +Linux*
 +Не всегда есть возможность,​ да и не всегда надо, строить полноценный туннель с интерфейсной парой адресов. Иногда нам нужно лишь «прокинуть» вполне определённые порты.
  
 +Тут важно понимать,​ что туннель можно организовать как изнутри сети, к ресурсам которой вы хотите получить доступ,​ на внешний ssh-сервер. Также можно организовать туннель с хоста в Интернете на пограничный ssh-сервер сети, чтобы получить доступ к внутренним ресурсам.
 +
 +Итак. По-порядку.
 +
 +Строим туннель из сети в мир.
 +
 +$ ssh -f -N -R 2222:​10.11.12.13:​22 username@99.88.77.66
 +
 +
 +
 +теперь введя на хосте 99.88.77.66:​
 +
 +$ ssh -p2222 localhost
 +
 +
 +
 +мы попадём на хост 10.11.12.13.
 +
 +Таким-же образом можно получить доступ к любому другому ресурсу,​ например:​
 +
 +$ ssh -f -N -R 2080:​10.11.12.14:​80 username@99.88.77.66
 +
 +
 +
 +Введя на хосте 99.88.77.66:​
 +
 +$ w3m -dump http://​localhost:​2080
 +
 +
 +
 +получим дамп web-ресурса на 10.11.12.14.
 +
 +Строим туннель из мира в сеть.
 +
 +$ ssh -f -N -L 4080:​192.168.0.10:​80 nameuser@88.77.66.55
 +
 +
 +
 +Аналогично,​ вводим на своём хосте:
 +
 +$ w3m -dump http://​localhost:​4080
 +
 +
 +
 +и получаем доступ к web-ресурсу узла 192.168.0.10,​ который находится за хостом 88.77.66.55.
 +
 +Поддерживаем туннели в поднятом состоянии
 +Ни для кого не секрет,​ что связь иногда обрывается,​ туннели при этом будут отваливаться по таймауту.
 +Чтобы не утруждать себя дополнительным монотонным вбиванием команды на поднятие туннеля и мониторингом этого процесса,​ автоматизируем его. Смело вводим:​
 +
 +$ crontab -e
 +
 +и создаём расписание примерно следующего вида:
 +
 +TUNCMD1='​ssh -f -N -R 2222:​10.11.12.13:​22 username@99.88.77.66'​
 +TUNCMD2='​ssh -f -N -R 2080:​10.11.12.14:​80 username@99.88.77.66'​
 +
 +*/5 * * * * pgrep -f "​$TUNCMD1"​ &>/​dev/​null || $TUNCMD1
 +*/5 * * * * pgrep -f "​$TUNCMD2"​ &>/​dev/​null || $TUNCMD2
 +
 +
 +
 +Сохраняемся. Проверяем по
 +
 +$ crontab -l
 +
 +
 +
 +что расписание принято.
 +
 +Это лишь ещё один момент особой админской магии… Надеюсь,​ что лишних вопросов не должно водникнуть. С дополнительными опциями ssh можно ознакомиться в
 +
 +$ man 1 ssh
 +
 +
 +
 +По практическому опыту — cron-задания на перезапуск абсолютно недостаточно.
 +Разве что соединение абсолютно стабильно. В реальной жизни встречается в 0% случаев.
 +Даже соединённые напрямую кабелем две сетевые карты легко могут потерять n-ное количество пакетов и tcp-соединение «упадёт».
 +Клиент и сервер будут пребывать в святой уверенности,​ что всё в порядке,​ просто вторая сторона ничего не передаёт.
 +Нужен keepalive.
 +Примерно так:
 +
 +TCPKeepAlive yes
 +ServerAliveInterval 300
 +ServerAliveCountMax 3
 +
 +
 +
 +Интервал и счётчик — по вкусу.
 +Добавлять их надо либо в /​etc/​ssh_config,​ либо в ~/​.ssh/​config,​ либо прямо в команде через опцию -o.
 +В принципе,​ судя по man ssh_config, первую из опций можно и опустить. но, на всякий случай,​ пусть будет.
 +
 +http://​habrahabr.ru
ssh_туннель.txt · Последние изменения: 2013/02/10 22:24 — 192.168.1.164