Ssh

ssh -R 僅在遠端綁定到 127.0.0.1

  • September 27, 2020

我正在執行ssh -N -f -R127.0.2.3:23000:127.1.2.3:23000 user@remote,我希望遠端上的隧道已經打開127.0.2.3:23000,但它只打開127.0.0.1:23000,這很不方便,因為我需要在遠端上打開幾個隧道,但要監聽同一個 tcp 埠。

在本地機器中,隧道指向正確的 IP 地址(127.1.2.3:23000)。

我嘗試在遠端創建多個環回設備,但無濟於事。

Linux 和 Freebsd 伺服器也是如此(openbsd-ssh)

那麼,為什麼 ssh -R 沒有綁定到 127.0.0.1 以外的遠端環回 ip?

謝謝你。

(抱歉編輯不好:)

雖然本地可選綁定地址由 SSH 的客戶端控制(在客戶端的配置中用/指定或用-L/LocalForward更改),但客戶端用/指定的遠端可選綁定地址由SSH 的伺服器端控制伺服器配置。_ 預設情況下它是. 它應該設置為允許客戶端選擇綁定到哪個地址:-gGatewayPorts-RRemoteForwardGatewayPortsno``clientspecified

GatewayPorts

指定是否允許遠端主機連接到為客戶端轉發的埠。預設情況下,sshd(8) 將遠端埠轉發綁定到環回地址。這可以防止其他遠端主機連接到轉發埠。GatewayPorts可用於指定 sshd 應允許遠端埠轉發綁定到非環回地址,從而允許其他主機連接。參數可能是no強制遠端埠轉發僅對本地主機可用,yes強制遠端埠轉發綁定到萬用字元地址,或者**clientspecified允許客戶端選擇**轉發綁定的地址。預設值為no.

此外,客戶的RemoteForward條目同樣告訴:

$$ … $$

如果未指定 bind_address,則預設僅綁定到環回地址。如果 bind_address 是 ‘*’ 或空字元串,則請求轉發以偵聽所有介面。 僅當啟用伺服器的選項時,指定遠端 bind_address 才會成功 GatewayPorts(請參閱 sshd_config(5))

所以你必須能夠在伺服器上更改 ssh 的伺服器配置(通常具有 root 訪問權限),並在sshd_config文件中添加(或編輯)此條目,因此它顯示:

GatewayPorts clientspecified

如果不能,您可以使用伺服器端存在(或本地可安裝)的其他可用工具來克服這個(相當薄弱的)安全限制。例如socat,或ssh自身通過使用LocalForward從伺服器到自身(即使它無用地添加一層加密)。

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