Ssh

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

  • May 26, 2016

我習慣於使用 ssh 在 localhost 上轉發遠端服務埠,例如:

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。

我被指出這樣一個事實,一個人可以簡單地做

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

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

簡單高效。

你可以使用 -R 來達到這個目的:

ssh -R 8080:127.0.0.1:7070 yourhost

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

文件說

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

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