터미널 창을 열고 다음 명령을 사용하여 셸에 연결합니다 netcat
.
Terminal Window 1: nc hostname port
그런 다음 디렉토리로 이동하여 ...etc 파일을 엽니다(자동화하는 것이 아니라 직접 수행할 수 있어야 합니다).
그런 다음 내 컴퓨터의 실행 파일 출력을 netcat
연결로 파이프할 수 있습니까?
답변1
명명된 파이프를 사용하여 이 작업을 수행할 수 있습니다.
mkfifo ncpipe
nc hostname port < ncpipe
# --- In a galaxy far, far away (another terminal) ---
somecommand > ncpipe
그러나 여기에는 몇 가지 문제가 있습니다. 예를 들어 너무 오래 걸리면 연결 시간이 초과되거나 하는 등의 문제가 있습니다.
이 작업을 양방향으로 수행할 수도 있습니다... 저는 이것을 얼마 전에 로컬 텔넷 포트를 전달하기 위해 사용했지만 여전히 작동하는지 확실하지 않습니다.
mkfifo send receive
> send &
> receive &
nc 127.0.0.1 23 < receive > send &
telnet_pid=$!
nc host port < send > receive &
server_pid=$!
wait $server_pid
kill $telnet_pid
rm send receive
어쨌든 명명된 파이프를 사용하면 몇 가지 이상한 작업을 수행할 수 있습니다. 하지만 조심해야 합니다. 파이프가 열려 있는 오래된 프로세스가 있는 경우 예상치 못한 출력이 발생할 수 있습니다. 각 작업에 대해 새롭고 깔끔한 파이프라인을 생성하고 완료되면 삭제하는 것이 좋습니다.
특히 SSH를 사용하면 포트 전달이 더 쉽고 안전하지만 항상 사용할 수 있는 것은 아닙니다. 시나리오에 따라 가능한 경우 다음을 수행하는 것이 가장 좋습니다.
somecommand | ssh user@host somereceiver
# or the other way around
ssh user@host somecommand | somereceiver