2014-08-29 7 views
0

트래픽을 양방향으로 라우팅해야하는 다중 홉 SSH 터널을 시도하고 있습니다. 내 네트워크 설정은 다음과 같습니다
ssh remoteforward over multiple hops

내 개인 쉘 machineA가 machineB이 machineC에 SSH 수 machineB
에 SSH 수 machineA

machineC 로컬 가공으로 이더넷을 통해 연결되어

서비스 실행이 있습니다 machineD가 machineD의 portX에 UDP 패킷을 보내고 machineD가 UDP를 통해 machineC의 portY로 응답을 보냅니다.

내가 성공적으로 수행 한 다음

ssh를 machineB (machineA에서)
(쉘 결과에서)
SSH (결과 쉘에서) machineC

는 "내 명령을"에코 | 가공의 서비스
NC -ul portY #Read machineC의 포트에 결과에 NC -u 가공 portX #Send 명령

내가 컴퓨터에 직접 사용자 정의 스크립트를 실행할 수 있도록 내가 터널을 통해이 모든 것을 할 싶습니다

A는 서비스 명령을 공식화하고 결과를 구문 분석합니다.

ssh를 machineB (machineA에서)
(다시 machineA에서)
ssh를 machineC
:

host machineB 
     hostname x.x.x.x 
     user username_machineB 
     localforward 1234 machineC:22 

    host machineC 
     hostname localhost 
     user username_machineC 
     port 1234 
     localforward 1235 machineD:portX 
     remoteforward 1236 localhost:portY 

가 나는 다음을 할 수있는 생각 : 나는 내 SSH를 설정 파일에 다음을 시도 (machineA에서 다시)
echo "my command"| nc -u localhost 1235
nc -ul 1236

하지만 ... 작동하지 않는 것 같습니다. 예상되는 응답이 1236에 표시되지 않습니다. 정확하게 디버깅하는 방법을 모르겠습니다. 또한 machineC의 구성에서 "localforward"및 "remoteforward"행의 형식을 완전히 알지 못합니다. 나는 그 라인들을 평가할 때 누가 "로컬 호스트"로 해석 될지 모른다. remoteFwarding이 machineC에서 사용되지 않을 수도 있습니다.하지만 먼저 다른 모든 것을 올바르게 구성했는지 확인하려고합니다. 나는 그것을 잘못하고 있나?

또는 machineB, C 또는 D의 구성을 변경하지 않고도 최종 목표를 달성 할 수있는 다른 방법이 있습니까? 내가하고 싶은 것은 machineA를 사용하여 machineD를위한 복잡한 명령을 프로그램 적으로 구성하고 machineA에서도 스크립트를 사용하여 결과를 파싱하는 것이다.

답변

0

당신이 이것을 할 때 거꾸로 생각해야합니다.

그래서 기본적으로 machC는 machD의 portX와 통신 할 수 있습니다.

ssh를 machC

를 이것은 당신의 최종 목표입니다 기계를 보내고 이제 당신이 얻을 수 machD

에서

를 수신하기 때문에 :

그래서 당신은 정말 마차에서이 작업을 실행하려면 machC를 직접 호출하면 ProxyCommand 항목이 들어갑니다.

host machC 
    ProxyCommand ssh machB nc %h %p 

그래서 당신은 machA가 machB에 ssh 할 수 있다고 말했습니다. 아무 문제 없습니다. 지금 당신이 할 경우 : machC

당신이 그 일을 통해 홉 볼 수 -v

SSH를.

host machineB 
    hostname x.x.x.x 
    user username_machineB 

host machineC 
    ProxyCommand ssh machineB nc %h %p 
    hostname localhost 
    user username_machineC 
    localforward 1235 machineD:portX 
    remoteforward 1236 localhost:portY 

그런 다음 명령을 사용할 수 있도록 위의 예제를 사용

host machC 
    ProxyCommand ssh machB nc %h %p 
    # first part is port on your current shell, second part is relative to machC 
    LocalForward 1234 machD:portX 
    RemoteForward 1235 localhost:portY 

: 당신이 machC 설정을 변경할 수 있도록 는하지만 실제로 당신은 machD의 포트에 machC에서 포트 포워딩 및 수신기를 원하는 :

SSH machineC

U를 se -v는 홉과 터널을보고, -N은 쉘을 얻는 것에 신경 쓰지 않는다면 -N입니다. 이제 localhost의 포트 1235와 통신하여 machineD portX로 보내고 1236에서 읽고 machineC 포트 Y를 청취하십시오