如何知道主动SSH端口转发


12

~/.ssh/config为VNC 配置了许多端口转发功能,每个服务器的端口都不同。

打开SSH会话时,是否有命令可以帮助我知道转发到哪个端口?

Answers:


13

如果使用该-v选项,ssh它将显示您要转发的内容(但也会显示许多其他调试消息):

ssh -v -L2222:localhost:22 remotehost

将显示给您:

...debug messages...
debug1: Authentication succeeded (publickey).
Authenticated to remotehost ([10.0.0.23]:22).
debug1: Local connections to LOCALHOST:2222 forwarded to remote address localhost:22
debug1: Local forwarding listening on ::1 port 2222.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 2222.
...debug messages...

然后,当您连接到该远程外壳时,您可以键入一个特殊的键序列:

~#

它将列出这样的连接:

The following connections are open:
  #3 client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1)
  #4 direct-tcpip: listening port 2222 for localhost port 22, connect from 127.0.0.1 port 59742 (t4 r1 i0/0 o0/0 fd 10/10 cc -1)

但是请注意,这只会列出其他程序实际正在使用的转发端口(在这种情况下,我只是telnet localhost 2222在本地计算机上做了将其转发到的操作)remotehost

如果没有当前正在转发的任何连接,则仍可以使用以下netstat命令查看ssh命令在本地侦听的内容:

% netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      28995/ssh       
tcp6       0      0 ::1:2222                :::*                    LISTEN      28995/ssh       

netstat命令可能还会列出其他内容,但是您要在输出中查找的是PID/Program用于查找ssh进程的Local Address列,该列将向您显示正在侦听哪些端口。在此示例中,它正在侦听port 2222我的机器上的IPv4和IPv6接口。


1
感谢您提供此答案,我的目标是在/etc/update-motd.d/中添加脚本以显示重定向到的端口。但是使用〜#命令,我只能在服务器上重定向端口。目标是显示(ssh -v输出的一部分):到LOCALHOST:5901的本地连接转发到远程地址127.0.0.1:5900侦听:: 1端口5901的本地转发。似乎仅显示这2行客户端侧。
slc66 2012年

对于2020年以后来这里的人们:netstat已过时了ss
ScumCoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.