列出打开的 SSH 隧道

列出打开的 SSH 隧道

我使用了很多 SSH 隧道连接到我的 Linux 机器上的各种服务器(用于隧道连接到数据库、Web 服务器等),通过 shell 脚本查看当前打开的隧道列表非常方便。

我可以通过 netstat 上的 grep 识别本地连接,如下所示:

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

但这不会显示它所连接的远程端口(显然包括未通过隧道的标准 SSH 连接)

更新:答案很好,但没有显示我所连接的远程端口。例如,我经常有一个到 mysql 的隧道,比如 localhost:3308 映射到服务器上的 :3306。通常我可以通过我选择的本地端口进行猜测,但如果可以同时访问这两个端口就更好了。

有任何想法吗?

答案1

如果你只想列出由以下人员创建的隧道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)

(这将是一个 -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-daemon 在端口 22 上监听(最后一行),生成了 2 个子进程(前两行,'用户'登录),在端口 5000 上创建了一个 -R 隧道,并且创建了一个 -L 隧道,将端口从我的(本地)机器转发到 localhost:80(www)。

答案2

尝试这个命令,它可能会有用:

ps aux | grep ssh

答案3

这并不完全是您的问题的解决方案,但有时也很方便:

在 ssh 会话中:

  1. 按 Enter 键
  2. 输入 ~ 然后输入 #

显示该会话中隧道上所有打开的连接的列表。

答案4

这是这个问题在谷歌上得到的最佳结果,所以我将我的答案放在这里。我熬夜筛选结果,想出了一个很长很复杂的命令,它只显示你的反向 ssh 隧道,格式如下:

公共 IP 地址:远程转发端口

这是代码,我正在运行 Ubuntu Server 12。我正在运行反向 ssh 隧道,将本地端口 5900 转发到我的公共 ssh 服务器,这个漂亮的命令显示了我所有带有远程端口的公共 IP 地址。

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

相关内容