web-dev-qa-db-fra.com

Liste des tunnels SSH ouverts

J'utilise beaucoup de tunnels SSH vers différents serveurs sur ma machine Linux (pour la gestion de tunnels vers des bases de données, des serveurs Web, etc.) et il serait très pratique d'afficher une liste des tunnels actuellement ouverts via un script Shell.

Je peux identifier les connexions locales via un grep sur netstat du type:

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

mais cela ne me montrera pas le port distant auquel elle est connectée (et inclut évidemment les connexions SSH standard non tunnellées)

UPDATE: Les réponses sont correctes mais ne me montrent pas le port distant auquel je suis connecté. Par exemple, j'ai souvent un tunnel menant à mysql, disons localhost: 3308 en correspondance avec: 3306 sur le serveur. Normalement, je peux deviner par les ports locaux que j'ai choisis mais ce serait bien d'avoir accès aux deux.

Des idées?

64
James Frost

si vous voulez seulement lister les tunnels créés par 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)

(ce serait un -L 9090: localhost: 80 tunnel)

si vous voulez voir les tunnels/connexions établis avec une 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)

ssh-daemon écoute sur le port 22 (dernière ligne), 2 sous-processus sont générés (les 2 premières lignes, login de 'utilisateur'), ​​un tunnel -R créé sur le port 5000 et un tunnel -L qui transmet un port de my ( local) machine à localhost: 80 (www).

69
akira

Essayez cette commande, elle pourrait être utile:

ps aux | grep ssh
13
Rajesh

pas exactement la solution à votre problème, mais aussi pratique parfois:

Depuis une session SSH:

  1. appuyez sur Entrée
  2. tapez ~ puis #

vous montre une liste de toutes les connexions ouvertes sur vos tunnels pour cette session.

13
reto
netstat -tpln | grep ssh
  • t: TCP
  • p: montrer le processus
  • l: écoute
  • n: valeurs numériques

EDIT: exemple pour le commentaire @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        

Ce qui peut être lu comme suit: SSH (pas SSHd) écoute le port local TCP 1443.

6
shellholic

Ceci est le meilleur résultat de Google pour cette question, je vais donc mettre ma réponse ici. Je suis resté éveillé toute la nuit à filtrer les résultats et à proposer une longue commande complexe qui vous montre uniquement vos tunnels ssh inversés dans ce format:

publicipaddress: remoteforwardedport

Voici le code. J'utilise Ubuntu Server 12. J'utilise des tunnels SSH inversés qui transmettent le port local 5900 à mon serveur SSH public et cette commande astucieuse affiche toutes mes adresses IP publiques avec le port distant.

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
4
Brandon
/sbin/ip tunnel list # replacement for the deprecated iptunnel command
0
Lucas Cimon

Comme je n'aime pas lsof, je suggère une méthode alternative (un autre gars m'a appris :)):

$ netstat -l | grep ssh

De cette façon, vous montrez les tunnels SSH créés par ssh qui sont ouverts en mode LISTEN (et omis par défaut par netstat).

0
FSp
 #!/bin/csh -f 
 echo tunnels SSH connectés 
 echo 
 pour chaque 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 
0
Richard