通過 ssh 的 netcat / 命名管道代理
我習慣於使用 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
將連接轉發到
service
fromremote-machine
上的埠local-machine
。簡單高效。
你可以使用 -R 來達到這個目的:
ssh -R 8080:127.0.0.1:7070 yourhost
這將在 yourhost:7070 上打開一個埠,該埠轉發到 localhost:8080
文件說
[-R [bind_address:]port:host:hostport]