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 ?

3voto

Robin A. Meade Points 161
report_local_port_forwardings() {

 # -a et la sélection des critères (par défaut or)
 # -i4 limite aux fichiers internet ipv4
 # -P inhibe la conversion des numéros de port en noms de port
 # -c /regex/ limite aux commandes correspondant à la regex
 # -u$USER limite aux processus possédés par $USER
 # http://man7.org/linux/man-pages/man8/lsof.8.html
 # https://stackoverflow.com/q/34032299

 echo 
 echo "TRANSFERT DE PORT LOCAL"
 echo
 echo "Vous avez configuré les transferts de port local suivants:"
 echo

 lsof -a -i4 -P -c '/^ssh$/' -u$USER -s TCP:LISTEN

 echo
 echo "Les processus qui ont configuré ces transferts sont:"
 echo

 ps -f -p $(lsof -t -a -i4 -P -c '/^ssh$/' -u$USER -s TCP:LISTEN)

}

report_remote_port_forwardings() {

 echo 
 echo "TRANSFERT DE PORT DISTANT"
 echo
 echo "Vous avez configuré les transferts de port distant suivants:"
 echo

 ps -f -p $(lsof -t -a -i -c '/^ssh$/' -u$USER -s TCP:ESTABLISHED) | awk '
 NR == 1 || /R (\S+:)?[[:digit:]]+:\S+:[[:digit:]]+.*/
 '
}

report_local_port_forwardings
report_remote_port_forwardings

Résultat d'exemple:

TRANSFERT DE PORT LOCAL

Vous avez configuré les transferts de port local suivants:

COMMANDE   PID  UTILISATEUR   FD   TYPE  DEVICE SIZE/OFF NODE NOM
ssh     10086 user     7u  IPv4 1924960      0t0  TCP localhost:2301 (LISTEN)
ssh     10086 user     9u  IPv4 1924964      0t0  TCP localhost:2380 (LISTEN)
ssh     10086 user    11u  IPv4 1924968      0t0  TCP localhost:2381 (LISTEN)

Les processus qui ont configuré ces transferts sont:

UID        PID  PPID  C STIME TTY          TIME CMD
user     10086  7074  0 13:05 pts/21   00:00:00 ssh -N ssh.example.com

TRANSFERT DE PORT DISTANT

Vous avez configuré les transferts de port distant suivants:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
user      7570 30953  0 11:14 pts/18   S      0:00 ssh -N -R 9000:localhost:3000 ssh.example.com

0voto

Lucas Cimon Points 442
/sbin/ip tunnel list # remplacement de la commande obsolète iptunnel

0voto

Richard Points 1
#!/bin/csh -f
echo Tunnels SSH connectés
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

0voto

FSp Points 101

Comme je n'aime pas lsof, je suggère une méthode alternative (qu'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 qui sont omis par défaut par netstat).

0voto

TNT Points 241

Comme alternative à lsof, vous pouvez utiliser ss de cette manière :

ss -tlp 2>/dev/null | grep -E '\'

netstat est considéré comme obsolète.

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