96 votes

Liste des tunnels SSH ouverts

Je utilise beaucoup de tunnels SSH vers divers serveurs sur ma machine linux (pour le tunneling vers des bases de données, des serveurs web, etc.) et ce serait vraiment pratique de pouvoir afficher une liste des tunnels ouverts actuels via un script shell.

Je peux identifier les connexions locales via un grep sur netstat comme suit:

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

mais cela ne me montrera pas le port distant auquel il est connecté (et inclut évidemment les connexions SSH standard qui ne sont pas tunnelisées)

MISE À JOUR : Les réponses sont bonnes mais ne me montrent pas le port distant auquel je suis connecté. Par exemple, j'ai souvent un tunnel vers 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 ?

101voto

akira Points 58339

Si vous souhaitez uniquement répertorier les tunnels créés par ssh:

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

(il s'agit d'un tunnel -L 9090:localhost:80)

si vous souhaitez voir les tunnels / connexions établies avec un sshd:

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

le démon ssh écoute sur le port 22 (dernière ligne), 2 processus enfants sont lancés (premières 2 lignes, connexion de 'utilisateur'), un tunnel -R est créé sur le port 5000, et un tunnel -L qui redirige un port de ma machine locale vers localhost:80 (www).

24voto

Rajesh Points 249

Essayez cette commande, elle pourrait être utile:

ps aux | grep ssh

22voto

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

À partir d'une session ssh:

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

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

14voto

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

ÉDIT : exemple pour le commentaire de @akira :

(en-tête ajouté, testé sur Debian wheezy)
Proto Recv-Q Send-Q Adresse locale           Adresse étrangère         État       PID/Nom du programme
tcp        0      0 127.0.0.1:1443          0.0.0.0:*               LISTEN      4036/ssh        

Qui peut être lu comme : SSH (pas SSHd) écoute sur le port local TCP 1443.

5voto

Brandon Points 51

Ceci est le résultat Google le plus populaire pour cette question, donc je vais mettre ma réponse ici. J'ai veillé toute la nuit à filtrer les résultats, et j'ai trouvé une longue commande complexe qui vous montre uniquement vos tunnels ssh inverses dans ce format :

adresseippublice:porttransféréàdistance

Voici le code. Je suis en train d'exécuter Ubuntu Server 12. Je fais des tunnels ssh inverses 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 '\' | 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X