How can I get list of open SSH tunnels?

I'm using Mac OS X client connected to FreeBSD server. I'm trying to query open tunnels on the client.

  • What OS would this be on? Is this your server? Do you have root access to it? Please edit your question and include more information. – EEAA Mar 11 '11 at 2:53
  • Check your other question, the answer I gave there will solve that too. – coredump Mar 11 '11 at 3:14
  • Are you looking at one session with multiple tunnels or multiple sessions? Pretty different topic :) – Blitz Mar 11 '11 at 13:29

You can use lsof:

$ lsof -i tcp | grep ^ssh
ssh       2211 lcipriani    3r  IPv4  20825      0t0  TCP lcipriani-laptop.local:49164->docsuite.cefla.com:22 (ESTABLISHED)
ssh       2223 lcipriani    3r  IPv4  21945      0t0  TCP lcipriani-laptop.local:34471->gd-b-21.vps.redomino.com:22 (ESTABLISHED)
ssh       2640 lcipriani    3r  IPv4  37488      0t0  TCP lcipriani-laptop.local:45693->makeda-xen1.redomino.com:22 (ESTABLISHED)
ssh       5279 lcipriani    3r  IPv4 212324      0t0  TCP lcipriani-laptop.local:56491-> (ESTABLISHED)
ssh       5279 lcipriani    4u  IPv6 210281      0t0  TCP lcipriani-laptop:10000 (LISTEN)
ssh       5279 lcipriani    5u  IPv4 210282      0t0  TCP localhost.localdomain:10000 (LISTEN)

The last line represent a tunnel (look at the state LISTEN).

| improve this answer | |
  • You can also use lsof's built-in filter using -c flag. So, lsof -i tcp -c '/^ssh/'. – Volte Feb 24 at 19:05

In Ubuntu, with iptables and iptstate installed and standard ssh port:

iptstate -D 22

each line will represent open tunnel.

| improve this answer | |
  • great tip.I did not knew it existed. – Registered User Mar 11 '11 at 7:06

If you're trying to find out what's using the tunnel(s) in a single ssh session, type ~# at the beginning of a line.

| improve this answer | |
/sbin/ip tunnel list # replacement for the deprecated iptunnel command
| improve this answer | |

Using lcipriani's answer in a script:

sessions=$(lsof -i tcp | grep "^ssh" | grep ESTABLISHED)
if [ -z "sessions" ]; then
    echo "no open ssh sessions"
    echo "ssh sessions are open"
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.