Listar túneis SSH abertos

55

Eu uso um monte de túneis SSH para vários servidores na minha máquina Linux (para encapsulamento de bancos de dados, servidores web, etc) e seria muito útil para ver uma lista de túneis abertos atuais através de um script de shell.

Eu posso identificar conexões locais através de um grep no netstat ao longo das linhas de:

netstat -n --protocol inet | grep ':22'

mas isso não mostrará a porta remota à qual está conectada (e obviamente inclui conexões SSH padrão que não são sintonizadas)

UPDATE : As respostas estão bem, mas não estão me mostrando a porta remota à qual estou conectado. Por exemplo, muitas vezes tenho um túnel até o mysql, digamos localhost: 3308 mapeando para: 3306 no servidor. Normalmente eu posso adivinhar pelas portas locais que eu escolhi, mas seria bom ter acesso a ambos.

Alguma idéia?

    
por James Frost 21.02.2011 / 12:09

8 respostas

60

se você quiser apenas listar túneis criados por ssh :

% sudo lsof -i -n | egrep '\<ssh\>'
ssh  19749  user  3u  IPv4 148088244   TCP x.x.x.x:39689->y.y.y.y:22 (ESTABLISHED)
ssh  19749  user  4u  IPv6 148088282   TCP [::1]:9090 (LISTEN)
ssh  19749  user  5u  IPv4 148088283   TCP 127.0.0.1:9090 (LISTEN)

(isso seria um túnel -L 9090: localhost: 80)

se você quiser ver os túneis / conexões feitos para um sshd :

 % sudo lsof -i -n | egrep '\<sshd\>'
sshd  15767  root  3u  IPv4 147401205   TCP x.x.x.x:22->y.y.y.y:27479 (ESTABLISHED)
sshd  15842  user  3u  IPv4 147401205   TCP x.x.x.x:22->y.y.y.y:27479 (ESTABLISHED)
sshd  15842  user  9u  IPv4 148002889   TCP 127.0.0.1:33999->127.0.0.1:www (ESTABLISHED)
sshd  1396   user  9u  IPv4 148056581   TCP 127.0.0.1:5000 (LISTEN)
sshd  25936  root  3u  IPv4 143971728   TCP *:22 (LISTEN)

o daemon ssh escuta na porta 22 (última linha), dois subprocessos são gerados (primeiras 2 linhas, login de 'usuário'), um túnel -R criado na porta 5000 e um túnel -L que encaminha uma porta da minha máquina (local) para localhost: 80 (www).

    
por 21.02.2011 / 12:22
13

Experimente este comando, pode ser útil:

ps aux | grep ssh
    
por 03.11.2012 / 08:29
8

não é exatamente a solução para o seu problema, mas também útil às vezes:

De dentro de uma sessão ssh:

  1. pressione Enter
  2. digite ~ e, em seguida, #

mostra uma lista de todas as conexões abertas nos seus túneis para essa sessão.

    
por 08.07.2013 / 23:45
6
netstat -tpln | grep ssh
  • t: TCP
  • p: processo de exibição
  • l: ouvindo
  • n: valores numéricos

EDIT: exemplo para comentário de @akira:

(header added, tested on Debian wheezy)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:1443          0.0.0.0:*               LISTEN      4036/ssh        

O que pode ser lido como: O SSH (não o SSHd) está escutando a porta TCP local 1443.

    
por 21.02.2011 / 13:07
4

Este é o melhor resultado do Google para esta questão, por isso vou colocar a minha resposta aqui. Fiquei acordado a noite toda filtrando os resultados e criei um longo comando complexo que mostra apenas seus túneis ssh reversos neste formato:

publicipaddress: remoteforwardedport

Aqui está o código, estou executando o Ubuntu Server 12. Estou executando túneis ssh reversos que encaminham a porta local 5900 para o meu servidor ssh público e este comando nifty mostra todos os meus endereços IP públicos com a porta remota.

sudo lsof -i -n | egrep '\<sshd\>' | grep -v ":ssh" | grep LISTEN | sed 1~2d | awk '{ print $2}' | while read line; do sudo lsof -i -n | egrep $line | sed 3~3d | sed 's/.*->//' | sed 's/:......*(ESTABLISHED)//' | sed 's/.*://' | sed 's/(.*//' | sed 'N;s/\n/:/' 2>&1 ;done
    
por 29.08.2014 / 14:09
0
/sbin/ip tunnel list # replacement for the deprecated iptunnel command
    
por 05.02.2014 / 13:43
0
#!/bin/csh -f
echo SSH Tunnels Connected
echo
foreach f ('netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grep LISTEN | cut -d" " -f45- | cut -d"/" -f1')
set ip = 'netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grep ESTABLISH | grep $f | cut -d" " -f20- | cut -d":" -f1'
#set h = 'grep -a "$ip" /htdocs/impsip.html | grep br | cut -d" " -f2'
echo -n "$ip    "
echo  'netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grep LISTEN | grep $f | cut -d":" -f2  | cut -d" " -f1'
#echo  " $h"
end
    
por 21.10.2014 / 11:16
0

Como não gosto de lsof, sugiro um método alternativo (outro cara me ensinou:)):

$ netstat -l | grep ssh

Desta forma, você mostra os túneis ssh criados por ssh que são abertos no modo LISTEN (e são omitidos por padrão por netstat ).

    
por 23.06.2017 / 12:03