Список открытых туннелей SSH

Я использую много SSH туннелей для различных серверов на моей машине linux (для туннелирования в базы данных, веб-серверы и т.д.), И это было бы очень удобно, чтобы просмотреть список текущих открытых туннелей с помощью сценария оболочки.

Я могу идентифицировать локальные соединения через grep на netstat по строкам:

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

но это не покажет мне удаленный порт, к которому он подключен (и, очевидно, включает стандартные SSH-соединения, которые не туннелированные)

обновление: ответы в порядке, но не показывают мне удаленный порт, к которому я подключен. Например, у меня часто есть туннель до mysql, скажем, localhost: 3308 отображение на: 3306 на сервере. Обычно я могу догадаться по локальным портам, которые я выбрал, но было бы неплохо иметь доступ к обоим.

какие идеи?

55
задан James Frost 2011-02-21 14:09:34
источник

8 ответов

если вы хотите только список туннели, созданные 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)

(это будет A-L 9090:localhost:80 туннель)

если вы хотите, чтобы увидеть туннели / соединения с 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-демон прослушивает порт 22 (последняя строка), 2 подпроцессов породил (первые 2 линии, логин "пользователь"), А-Р туннель на порт 5000, и -Л тоннеля, который перенаправляет порт от меня (местный) машина на localhost:80 (ВСП).

60
отвечен akira 2011-02-21 16:31:53
источник

попробуйте эту команду, она может быть полезна:

ps aux | grep ssh
13
отвечен Rajesh 2012-11-03 11:34:15
источник

не совсем решение для вашей проблемы, но и удобно иногда:

изнутри сеанса ssh:

  1. нажмите enter
  2. введите ~, а затем #

показывает список всех открытых соединений через туннели для этого сеанса.

8
отвечен reto 2013-07-24 11:40:23
источник
netstat -tpln | grep ssh
  • t: TCP
  • p: показать процесс
  • l: слушать
  • n: числовые значения

EDIT: пример для @ 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        

который может быть прочитан как: SSH (не SSHd) слушает локальный TCP порт 1443.

6
отвечен shellholic 2011-02-21 15:53:34
источник

это верхний результат google для этого вопроса, поэтому я поставлю свой ответ здесь. Я не спал всю ночь, фильтруя результаты, и придумал длинную сложную команду, которая показывает вам только ваши обратные SSH-туннели в этом формате:

publicipaddress: remoteforwardedport

вот код, я запускаю Ubuntu Server 12. Я запускаю обратные SSH-туннели, которые перенаправляют локальный порт 5900 на мой общедоступный ssh-сервер, и эта отличная команда показывает все мои общедоступные ip-адреса с помощью удаленного порта.

sudo lsof -i -n | egrep '\<sshd\>' | grep -v ":ssh" | grep LISTEN | sed 1~2d | awk '{ print }' | 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 2014-08-29 16:09:52
источник
/sbin/ip tunnel list # replacement for the deprecated iptunnel command
0
отвечен Lucas Cimon 2014-02-05 16:43:49
источник
#!/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
0
отвечен Richard 2014-10-21 13:21:47
источник

Так как мне не нравится lsof, я предлагаю альтернативный метод (другой парень научил меня :)):

$ netstat -l | grep ssh

таким образом вы показываете SSH туннели, созданные ssh, которые открываются в режиме прослушивания (и по умолчанию опущены netstat).

0
отвечен FSp 2017-06-23 13:03:19
источник

Другие вопросы shell ssh ssh-tunnel

X