Security
在 ControlMaster SSH 會話上以程式方式刪除埠轉發
不久前,我得到了一個答案,告訴我如何在正在執行的 SSH ControlMaster 程序上添加埠轉發。要知道這有很大幫助,但是在我不再需要這種埠轉發之後,我仍然缺少一種刪除此類埠轉發的方法。
據我所知,您可以通過正常連接上的內部命令鍵序列來執行此操作,這似乎對 ControlMaster 客戶端禁用。即使這是可能的,我也需要一個可以用腳本自動化的解決方案,這肯定不是那麼容易。
有沒有辦法做到這一點?它是否易於自動化?
正如我之前的回答所指出的,ssh 手冊頁
-O ctl_cmd
詳細解釋ctl_cmd
了check
,forward
,cancel
或exit
.-O ctl_cmd Control an active connection multiplexing master process. When the -O option is specified, the ctl_cmd argument is interpreted and passed to the master process. Valid commands are: “check” (check that the master process is running), “forward” (request forwardings without command execution), “exit” (request the master to exit), and “stop” (request the master to stop accepting further multiplexing requests).
您可以使用
ctl_cmd
’s 來完成腳本所需的自動化。您需要首先使用like 和 ssh創建一個ControlMaster
套接字到遠端主機,如下所示:-S
ssh -v -M -S/tmp/controlmaster-remotehost remotehost
然後從您的本地機器上,您可以隨意使用
forward
埠cancel
。您可以使用一個命令轉發多個埠:ssh -O forward -S/tmp/controlmaster-remotehost -L5555:localhost:22 -L3333:localhost:22 remotehost
和/或一次處理一個:
ssh -O cancel -S/tmp/controlmaster-remotehost -L5555:localhost:22 remotehost ssh -O cancel -S/tmp/controlmaster-remotehost -L3333:localhost:22 remotehost
我創建了一個並排會議的要點,展示了
ssh -O ctl_cmd
實際情況;左側是來自 localhost 的埠forward
/cancel
,右側是連接到 remotehost 的 ssh 輸出:這些命令僅在OpenSSH 6.0中可用:
* ssh(1): support for cancelling local and remote port forwards via the multiplex socket. Use ssh -O cancel -L xx:xx:xx -R yy:yy:yy user@host" to request the cancellation of the specified forwardings * support cancellation of local/dynamic forwardings from ~C commandline
如果您有較早的版本,則需要升級。如果您使用的是 Mac OS X,您可以安裝 macports,然後使用以下命令進行升級:
sudo port install openssh
這會將其安裝到/opt/local/bin
.