Неувядающий SSH-туннель

Linux
Как известно, SSH-туннели смертны. Помирают они по самым разным, порой непредсказуемым причинам, так что все возможные казусы одним лишь рихтованием настроек SSH предусмотреть наперёд невозможно. Понятно, что так жить нельзя, и с этим разумеется, нужно было позавчера что-то делать :)
На счастье в *nix кроме монстроидальных ужасных by design вещей типа upstart или systemd есть ещё и маленькие надёжные программы, решающие свою узкую задачу просто, предсказуемо и прямолинейно, то есть в так называемом unix-way стиле. К числу таковых относится и так называемый супервизор RunIt. Почитать о нём подробно можно, например, на хабре, здесь же я приведу готовое решение проблемы рушащегося на головы туннеля:

sudo apt-get install runit
sudo mkdir /etc/sv/unbreak-tun
cat <<'EOF' | sudo tee /etc/sv/unbreak-tun/run
#!/bin/bash
exec 2>&1
chpst  -u gideon:gideon ssh -i /home/gideon/.ssh/unsecure.rsa -p 5714 -L 1234:localhost:4567 melpomena@remote.host
EOF
sudo chmod +x /etc/sv/unbreak-tun/run
sudo ln -s '../sv/unbreak-tun' /etc/service/

Собственно, вот и всё решение!
Поменяйте номера портов, имена хостов и логины пользователей на нужные перед копированием этого кода в консоль — и получите туннель который уж если работает, то убить его будет решительно невозможно. А вот штатным образом остановить службу — пожалуйста: sudo sv stop unbreak-tun.

2 комментария