如何清除本地 ssh 端口以转发到远程?

如何清除本地 ssh 端口以转发到远程?

我正在使用 ssh 将本地端口转发到堡垒服务器(10.20.30.40),连接到远程 RDS 数据库。

ssh -i ~/.ssh/id_rsa -f -N -L 5432:db1.cluster-1.region.rds.amazonaws.com:5432 10.20.30.40 -v
...
Authenticated to 10.20.30.40 ([10.20.30.40]:22).
debug1: Local connections to LOCALHOST:5432 forwarded to remote address db1.cluster-1.region.amazonaws.com:5432
debug1: Local forwarding listening on ::1 port 5432.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 5432.
debug1: channel 1: new [port listener]
debug1: Requesting [email protected]
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0

将使用本地端口 5432。如​​果创建新的转发

ssh -i ~/.ssh/id_rsa -f -N -L 5433:db1.cluster-1.region.rds.amazonaws.com:5432 10.20.30.40 -v

将使用 5433 端口。

如果在新的终端启动 5432 将会失败,因为已经在使用中。

Authenticated to 10.20.30.40 ([10.20.30.40]:22).
debug1: Local connections to LOCALHOST:5432 forwarded to remote address db1.cluster-1.region.rds.amazonaws.com:5432
debug1: Local forwarding listening on ::1 port 5432.
bind [::1]:5432: Address already in use
debug1: Local forwarding listening on 127.0.0.1 port 5432.
bind [127.0.0.1]:5432: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 5432
Could not request local forwarding.
debug1: Requesting [email protected]
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0

如何释放这些端口连接?

答案1

只要您的 SSH 会话处于活动状态,端口就会被阻止。如果您没有使用参数将其生成到后台,-f您可以直接注销或点击ctrl- c,但您无法在后台会话中执行此操作。

您可以使用 列出正在运行的进程ps。然后您就可以查看kill该进程。

$ ps  -af |grep ssh
username    2113    1822  0 10:19 pts/0    00:00:00 ssh -L 5433:db1.cluster-1.region.rds.amazonaws.com:5432 host
$ kill 2113

答案2

正如其他人在评论中所说...该端口与启动它的进程绑定。它将保持打开状态,直到该进程退出。

您可以使用-p参数来netstat查看哪些进程保持哪些端口打开。我会高度建议您也将其限制为仅带有标志的 TCP 端口-t...最后,使用该标志关闭 DNS 查找-n

因此,你正在查看的内容如下:

netstat -npt

这应该会“列出”当前状态表中的所有端口,以及进程 ID 或程序名称。最后一部分可能需要通过类似sudo(或 Cygwin“以管理员身份运行”)的方式提升权限

例如:

$ sudo netstat -npt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8651          127.0.0.1:50644         TIME_WAIT   -
tcp        0      0 127.0.0.1:8649          127.0.0.1:53761         TIME_WAIT   -
tcp        0      0 127.0.0.1:80            127.0.0.1:58488         TIME_WAIT   -
tcp        0    348 172.16.XXX.YYY:22       172.16.XXX.ZZZ:54272    ESTABLISHED 21020/sshd: russell
...

相关内容