저는 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