列出我自己从 ssh 转发的端口?

列出我自己从 ssh 转发的端口?

如果我像这样连接到服务器:

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 的连接/隧道。首先可以使用netstatp显示进程名称(需要 sudo),ip-显示 IP 连接):

sudo netstat -ap --ip | grep ssh

其次,还可以使用套接字统计命令ssp- 显示进程名称(需要 sudo)、e- 用户 ID 的扩展套接字信息、t- TCP 连接):

sudo ss -pet | grep ssh

注意:直到客户端的某些东西启动到本地端口的连接时,才会在服务器上创建本地(-L)ssh 隧道 - 只有这样,隧道才会在服务器端建立,并且可以通过这些方法或任何其他答案看到。

相关内容