Ssh

如何清除本地 ssh 埠以轉發到遠端?

  • November 9, 2021

我正在使用 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 no-more-sessions@openssh.com
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com 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 no-more-sessions@openssh.com
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0

如何釋放這些埠連接?

只要您的 SSH 會話處於活動狀態,該埠就會被阻止。如果您沒有使用-f可以註銷或點擊的參數將其生成到後台ctrl- c,則無法在後台會話中執行此操作。

您可以使用 列出正在執行的程序ps。然後你kankill這個過程。

$ 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

正如其他人在評論中所說…該埠綁定到啟動它的程序。它將保持打開狀態,直到該程序退出。

您可以使用該-p參數來netstat查看哪些程序正在保持哪些埠打開。我強烈建議您將其限制為僅帶有-t標誌的 TCP 埠……最後,關閉帶有-n標誌的 DNS 查找。

因此,您正在查看以下內容:

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
...

引用自:https://serverfault.com/questions/1082990