我已经~/.ssh/config
为 VNC 配置了许多端口转发,每个服务器都有不同的端口。
是否有命令可以帮助我知道当我打开 SSH 会话时转发到哪个端口?
答案1
如果您使用该-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...
然后,当您连接到该远程 shell 时,您可以输入一个特殊的键序列:
~#
它将列出如下连接:
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 接口。