20080921

ssh туннель — по-простому

что-то уж очень сложные и заумные руководства попадаются, когда ищешь, как создать туннель с помощью ssh.
ya@inner.host:~$ ssh -f -N -R 2345:inner.host:22 user@outer.host
процесс будет висеть в бэкграунде. можно разлогиниваться. главное, машину не выключать.
пользоваться так:
user@outer.host:~$ ssh -p 2345 ya@localhost
ya@localhost's password: — вбиваем пароль для ya@inner.host и попадаем на inner.host
все. вот и вся инструкция. дальше — лишь пояснения и дополнения.

смысл обозначений:
inner.host — машина за nat-ом
ya — ваша учетка на этом inner.host-е.
outer.host — машина, имеющая внешний ip
user — ваша учетка на этом outer.host-е.

p.s. кусочек «inner.host:22» — это способ достучаться до собственного sshd непосредственно с inner.host-а. если sshd слушает на порту 1000 — «inner.host:1000».
кусочек «inner.host:22» вполне можно заменить и на «localhost:22», и на «127.0.0.1:22».

p.p.s. на машине inner.host можно поставить «сторожа», присматривающего за процессом ssh. это потребует настройки беспарольной аутентификации (описана в сети многократно, поэтому опускаю).
ya@inner.host:~$ crontab -e
и добавляем пару строк:
C='ssh -f -N -R 2345:inner.host:22 user@outer.host'
*/10 * * * * pgrep -f "$C" &>/dev/null || $C
проверка на «живость» будет происходить каждые 10 минут.