透過 ssh 的 netcat / 命名管道代理

透過 ssh 的 netcat / 命名管道代理

我習慣於使用 ssh 在本地主機上轉發遠端服務端口,例如:

ssh -L 2181:localhost:2182 user@server (將遠端主機連接埠2182轉送至本機連接埠2181)

現在,從我 ssh 到的機器,我嘗試存取 TCP 服務並將回應轉發到我的本機:

local-machine:2181 <-- SSH --> remote-machine:2182 <-- netcat/named pipe --> service:2181

注意:我無法直接存取服務計算機,我只能透過 SSH 存取網路。

我試圖將 netcat 與命名管道一起使用:

在遠端機器上:

mkfifo fifo
nc -k -l 2182 <fifo | nc service 2181 >fifo

在本機上: echo message | nc localhost 2181

但這似乎不起作用。

我也嘗試過,在遠端機器上 nc -k -l 2182 0<fifo | nc service 2181 1>fifo

沒有運氣

在遠端機器上nc -k -l 2182輸出我從本機發送的訊息:2181

如果我只是簡單地透過管道傳遞:nc -k -l 2182 | nc service 2181 我確實看到了遠端電腦上服務的回應。因此,我可以一直訪問服務並返回遠端計算機,但它停在那裡:

local-machine:2181 <-/- SSH --> remote-machine:2182 <-- netcat --> service:2181

所以我不明白為什麼命名管道不會透過 ssh 連線將回應轉發回我的本機電腦。

echo message | nc localhost 2182遠端電腦上的命令不會在本機上輸出任何內容,因此由於某種原因它無法透過 SSH 進行傳輸。

知道這是為什麼以及如何解決它嗎?

感謝幫助。

(為清楚起見已編輯)注意:我需要這個,因為我只能透過 SSH 連接到一台機器,該機器是叢集的一部分,並且該機器可以存取服務。我不想將服務暴露給外部,也不希望每個服務容器都有一個 SSHD。

答案1

有人向我指出這樣一個事實:人們可以簡單地做

ssh -L 2181:service:2181 user@remote-machine

將連線轉送到servicefromremote-machine上的連接埠local-machine

簡單高效。

答案2

您可以使用 -R 來達到此目的:

ssh -R 8080:127.0.0.1:7070 yourhost

這將在 yourhost:7070 上打開一個端口,轉發到 localhost:8080

文件說

[-R [bind_address:]port:host:hostport]

相關內容