如果我像这样连接到服务器:
JP_PORT=$(shuf -i 8895-9100 -n 1)
TB_PORT=$(shuf -i 6010-6200 -n 1)
ssh -Y -L ${JP_PORT}:127.0.0.1:${JP_PORT} -L ${TB_PORT}:127.0.0.1:${TB_PORT} <host>
一旦建立连接,是否有任何终端命令可以返回我转发的端口列表?
答案1
您可以通过 lsof 列出
sudo lsof -i -n
您可以使用 grep 来过滤结果
sudo lsof -i -n | grep ssh
答案2
如果仅列出实际使用的转发连接就足够了,并且您的会话是交互式的(就像您的情况一样),您可以~#
在 ssh 会话中使用转义。只需输入enter~#。
$ ssh -L1234:localhost:22 localhost
seb@localhost's password:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-23-generic x86_64)
$ ~#
The following connections are open:
#2 client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1)
#3 direct-tcpip: listening port 1234 for localhost port 22, connect from 127.0.0.1 port 37238 to 127.0.0.1 port 1234 (t4 r1 i0/0 o0/0 fd 10/10 cc -1)
这还将列出在会话中稍后使用转义命令添加的转发,因此不会出现在命令行中。
尝试~?
在 ssh 会话中执行其他有用的命令。另请参阅ssh 手册页。
答案3
还有几种方法可以列出 ssh 的连接/隧道。首先可以使用netstat
(p
显示进程名称(需要 sudo),ip
-显示 IP 连接):
sudo netstat -ap --ip | grep ssh
其次,还可以使用套接字统计命令ss
(p
- 显示进程名称(需要 sudo)、e
- 用户 ID 的扩展套接字信息、t
- TCP 连接):
sudo ss -pet | grep ssh
注意:直到客户端的某些东西启动到本地端口的连接时,才会在服务器上创建本地(-L
)ssh 隧道 - 只有这样,隧道才会在服务器端建立,并且可以通过这些方法或任何其他答案看到。