Jam*_*ost 90 ssh shell ssh-tunnel
我在我的 linux 机器上使用了很多到各种服务器的 SSH 隧道(用于连接到数据库、Web 服务器等),通过 shell 脚本查看当前打开的隧道列表会非常方便。
我可以通过 netstat 上的 grep 识别本地连接:
netstat -n --protocol inet | grep ':22'
Run Code Online (Sandbox Code Playgroud)
但这不会向我显示它连接到的远程端口(显然包括没有隧道的标准 SSH 连接)
更新:答案很好,但没有显示我连接的远程端口。例如,我经常有一条通向 mysql 的隧道,比如 localhost:3308 映射到服务器上的 :3306。通常我可以通过我选择的本地端口来猜测,但同时访问这两个端口会很好。
有任何想法吗?
aki*_*ira 95
如果您只想列出由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)
Run Code Online (Sandbox Code Playgroud)
(这将是一个 -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)
Run Code Online (Sandbox Code Playgroud)
ssh-daemon 侦听端口 22(最后一行),产生 2 个子进程(前 2 行,“用户”登录),在端口 5000 上创建的 -R 隧道和转发来自我的端口的 -L 隧道(本地)机器到 localhost:80 (www)。
小智 21
不完全是您问题的解决方案,但有时也很方便:
从 ssh 会话中:
向您显示该会话的隧道上所有打开连接的列表。
she*_*lic 12
netstat -tpln | grep ssh
Run Code Online (Sandbox Code Playgroud)
编辑:@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
Run Code Online (Sandbox Code Playgroud)
可以理解为:SSH(不是 SSHd)正在侦听本地 TCP 端口 1443。
小智 5
这是这个问题的顶级谷歌结果,所以我会把我的答案放在这里。我熬了一夜过滤结果,并想出了一个很长的复杂命令,该命令仅以这种格式显示您的反向 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 $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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196382 次 |
| 最近记录: |