I have an ssh client machine picard behind multiple unreliable internet connections - all with NAT.I have my server time, reliable with a static IP.I want to be able to access picard thorugh time. I've done this before:ssh -N -R 19999:localhost:22 user@my.domainThis works, but if there is a problem it exits and does not restart, and it doesn't start on boot, so now I add a sydtemd service to run:/bin/bash -c while true; do /usr/bin/ssh -i <unencrypted key> -o ServerAliveInterval=10 -v -o ServerAliveCountMax=6 -N -R 19999:localhost:22 user@my.domain; sleep 5; donewhile true ... sleep 5 re-runs ssh if it exits-o ServerAliveInterval=10 sends a keep-alive every 10 secnods-o ServerAliveCountMax=6 exits if 6 keep-alives go out with no response-v keeps debug info in /var/log/messages through systemdOn the server side I added a couple of lines to sshd_config:KeepAlive yesClientAliveInterval 10ClientAliveCountMax 6Same idea as the client -  break the connection after 60s of inactivity.Unfortunately it seems to take a lot longer than a minute to restart:< tunnel is up and keepalives are coming in >Jun  7 17:31:02 picard bash[135]: debug1: client_input_global_request: rtype keepalive@openssh.com want_reply 1Jun  7 17:31:12 picard bash[135]: debug1: client_input_global_request: rtype keepalive@openssh.com want_reply 1Jun  7 17:31:15 picard bash[135]: debug1: client_input_channel_open: ctype forwarded-tcpip rchan 2 win 2097152 max 32768Jun  7 17:31:15 picard bash[135]: debug1: client_request_forwarded_tcpip: listen localhost port 19998, originator 127.0.0.1 port 38267Jun  7 17:31:15 picard bash[135]: debug1: connect_next: host localhost ([127.0.0.1]:22) in progress, fd=4Jun  7 17:31:15 picard bash[135]: debug1: channel 0: new [127.0.0.1]Jun  7 17:31:15 picard bash[135]: debug1: confirm forwarded-tcpipJun  7 17:31:15 picard bash[135]: debug1: channel 0: connected to localhost port 22Jun  7 17:31:20 picard systemd-logind[137]: New session 1 of user main_username.< I break eth0 and plug it back in after NM sees it's down >< eth0 is back up within a few seconds >< nothing happens with my ssh connection for a LONG time >Jun  7 17:54:16 picard bash[135]: Write failed: Broken pipeJun  7 17:54:22 picard bash[135]: OpenSSH_6.1p1, OpenSSL 1.0.1c-fips 10 May 2012Jun  7 17:54:22 picard bash[135]: debug1: Reading configuration data /etc/ssh/ssh_configJun  7 17:54:22 picard bash[135]: debug1: /etc/ssh/ssh_config line 50: Applying options for *Jun  7 17:54:22 picard bash[135]: debug1: Connecting to my.domain [123.234.123.234] port 22.Jun  7 17:54:22 picard bash[135]: debug1: Connection established.Jun  7 17:54:23 picard bash[135]: debug1: identity file /home/test/.ssh/id_rsa type 1Jun  7 17:54:23 picard bash[135]: debug1: identity file /home/test/.ssh/id_rsa-cert type -1Jun  7 17:54:23 picard bash[135]: debug1: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3Jun  7 17:54:23 picard bash[135]: debug1: match: OpenSSH_5.8p1 Debian-1ubuntu3 pat OpenSSH_5*Jun  7 17:54:23 picard bash[135]: debug1: Enabling compatibility mode for protocol 2.0Jun  7 17:54:23 picard bash[135]: debug1: Local version string SSH-2.0-OpenSSH_6.1Jun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_KEXINIT sentJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_KEXINIT receivedJun  7 17:54:23 picard bash[135]: debug1: kex: server->client aes128-ctr hmac-md5 noneJun  7 17:54:23 picard bash[135]: debug1: kex: client->server aes128-ctr hmac-md5 noneJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sentJun  7 17:54:23 picard bash[135]: debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUPJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_KEX_DH_GEX_INIT sentJun  7 17:54:23 picard bash[135]: debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLYJun  7 17:54:23 picard bash[135]: debug1: Server host key: RSA 7a:19:72:9d:f5:39:f5:03:cf:16:b2:ee:fc:a4:e6:baJun  7 17:54:23 picard bash[135]: debug1: Host 'my.domain' is known and matches the RSA host key.Jun  7 17:54:23 picard bash[135]: debug1: Found key in /home/test/.ssh/known_hosts:1Jun  7 17:54:23 picard bash[135]: debug1: ssh_rsa_verify: signature correctJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_NEWKEYS sentJun  7 17:54:23 picard bash[135]: debug1: expecting SSH2_MSG_NEWKEYSJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_NEWKEYS receivedJun  7 17:54:23 picard bash[135]: debug1: Roaming not allowed by serverJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_SERVICE_REQUEST sentJun  7 17:54:23 picard bash[135]: debug1: SSH2_MSG_SERVICE_ACCEPT receivedJun  7 17:54:23 picard bash[135]: debug1: Authentications that can continue: publickey,passwordJun  7 17:54:23 picard bash[135]: debug1: Next authentication method: publickeyJun  7 17:54:23 picard bash[135]: debug1: Offering RSA public key: /home/test/.ssh/id_rsaJun  7 17:54:23 picard bash[135]: debug1: Server accepts key: pkalg ssh-rsa blen 279Jun  7 17:54:23 picard bash[135]: debug1: read PEM private key done: type RSAJun  7 17:54:24 picard bash[135]: debug1: Authentication succeeded (publickey).Jun  7 17:54:24 picard bash[135]: Authenticated to my.domain ([123.234.123.234]:22).Jun  7 17:54:24 picard bash[135]: debug1: Remote connections from LOCALHOST:19999 forwarded to local address localhost:22Jun  7 17:54:24 picard bash[135]: debug1: Requesting no-more-sessions@openssh.comJun  7 17:54:24 picard bash[135]: debug1: Entering interactive session.Jun  7 17:54:24 picard bash[135]: debug1: remote forward success for: listen 19999, connect localhost:22Jun  7 17:54:24 picard bash[135]: debug1: All remote forwarding requests processedJun  7 17:54:44 picard bash[135]: debug1: client_input_global_request: rtype keepalive@openssh.com want_reply 1Jun  7 17:54:45 picard bash[135]: debug1: client_input_channel_open: ctype forwarded-tcpip rchan 2 win 2097152 max 32768Jun  7 17:54:45 picard bash[135]: debug1: client_request_forwarded_tcpip: listen localhost port 19999, originator 127.0.0.1 port 60222Jun  7 17:54:45 picard bash[135]: debug1: connect_next: host localhost ([127.0.0.1]:22) in progress, fd=4Jun  7 17:54:45 picard bash[135]: debug1: channel 0: new [127.0.0.1]Jun  7 17:54:45 picard bash[135]: debug1: confirm forwarded-tcpipJun  7 17:54:45 picard bash[135]: debug1: channel 0: connected to localhost port 22Jun  7 17:54:50 picard systemd-logind[137]: New session 3 of user main_username.< whenever I connect the keepalive debug messages stop coming, not sure if this is normal >I'm sure I've overlooked something. I've seen some projects like autossh that do pretty much the same thing I'm doing now, but I'd like to be able to fix this if possible. How do I get the delay down to 2-3 minutes instead of 23 minutes?
My reverse-ssh tunnel is using keepalives but they're not helping
ssh;ssh tunneling;sshd