Достаточно часто возникает необходимость поднять туннель с целью пробросить некоторый порт. Сделать это достаточно просто с помощью SSH, однако у этого метода есть недостаток - в случае пропадания связи туннель ломается и с появлением связи не восстанавливается самостоятельно.
Решить проблему можно достаточно достаточно простым скриптом. Однако есть более интересное решение - запускать ssh из inittab. Тогда перезапускаться туннель будет самой программой init.
В этой заметке будет рассказано об организации ssh-туннеля с машины под управлением Gentoo на машину под управлением любой ОС семейства *nix.
Для начала нам нужно настроить авторизацию в SSH с помощью RSA-ключей. Как это сделать описано здесь. Однако для ленивых есть замечательный скрипт - ssh-installkeys. Для начала установим его (от имени пользователя root):
emerge ssh-installkeys
А теперь от имени простого пользователя настроим авторизацию с помощью ключей:
ssh-installkeys user@some.host
Убедимся что теперь можно логиниться на удалённый хост не вводя пароль:
ssh user@some.host
Теперь снова заходим как супер пользователь и начинаем настраивать туннель. Для этого нужно в файл /etc/inittab добавить следующую строчку:
rr:3456:respawn:su -l -c "ssh -R 2222:localhost:22 user@some.host" user
И далее заставляем программу init перечитать inittab:
telinit q
Всё. Теперь заходим на удалённый хост и пробуем залогиниться:
ssh -p 2222 user@localhost
Если нужно чтобы можно было логиниться не только с localhost а вообще с любого адреса - строка в inittab должна принять вид:
rr:3456:respawn:su -l -c "ssh -R some.host:2222:localhost:22 user@some.host" user
Особых комментариев к выполняемым командам я думаю не нужно. Всё достаточно элементарно, и если что-то не понятно - достаточно глянуть в man inittab и/или man ssh.