SSH를 통한 명명된 파이프 프록시 [닫기]

SSH를 통한 명명된 파이프 프록시 [닫기]

저는 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를 통해 작동하지 않습니다.

이것이 왜 발생하는지, 어떻게 해결하는지 아시나요?

도와 주셔서 감사합니다.

답변1

@ysdx가 지적했듯이

간단한 해결책은 다음과 같습니다.

ssh -L 2181:service:2182 user@server

관련 정보