From b1bdc953c2bf7d9fdc9d0ee6ca8fa9bf994bbbab Mon Sep 17 00:00:00 2001 From: Hyperling Date: Wed, 4 Nov 2026 19:11:51 -0700 Subject: [PATCH] tunnel, restart the service if the remote host no longer forwards to the local process. --- tasks/general/settings/tunnel.yml | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tasks/general/settings/tunnel.yml b/tasks/general/settings/tunnel.yml index 4ce61c3..748d67f 100644 --- a/tasks/general/settings/tunnel.yml +++ b/tasks/general/settings/tunnel.yml @@ -17,6 +17,20 @@ ansible.builtin.set_fact: tunnel_service_name: tunnel +- name: General | Tunnel | Packages [pacman] + ansible.builtin.package: + name: + - openbsd-netcat + state: present + when: ansible_pkg_mgr == "pacman" + +- name: General | Tunnel | Packages [apt] + ansible.builtin.package: + name: + - netcat-openbsd + state: present + when: ansible_pkg_mgr == "apt" + - name: General | Tunnel | runit block: @@ -38,7 +52,22 @@ content: | #!/bin/sh -e exec 2>&1 - exec chpst -u {{ user }} ssh -v -N \ + + # Health check to ensure connection does not go stale. + ( + while true; do + sleep 300 + nc -zv {{ tunnel_remote_host }} {{ tunnel_remote_port }} >/dev/null 2>&1 + status="$?" + if [[ "$status" != 0 ]]; then + echo "RUN: Port check returned $status, restarting service." + sv restart {{ tunnel_service_name }} + fi + done + ) & + + # Do not use `exec` here otherwise the loop may get killed. + chpst -u {{ user }} ssh -v -N \ -R {{ tunnel_remote_port }}:localhost:{{ tunnel_local_port }} \ -p {{ tunnel_ssh_port }} {{ tunnel_remote_host }} mode: "0755"