ProxyCommand를 사용하여 여러 호스트를 통한 SSH?


11

집에있는 컴퓨터의 ~ / .ssh / config에 다음과 같은 항목이 있습니다.

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

gateway.example.com공용 인터넷과 내부 네트워크에 모두 연결된 서버는 어디에 있습니까 ? 게이트웨이 상자는 / etc / hosts의 항목을 사용하여 foo와 bar를 해결합니다.

내 문제는의 반대편에있는 상자에 도달해야한다는 것입니다 foo. "baz"라고 부르겠습니다. "baz"호스트는 foo가 연결된 다른 개인 네트워크에 있지만 "gateway"에 연결된 호스트에는 없습니다.

나는 이것을 사용하려고 시도했다.

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

그러나 그것은 효과가 없으며, 나는 내 깊이에서 조금 벗어났습니다. 어떻게해야합니까?

나는 그것이 중요하다고 생각하지 않지만 우분투 10에서 이것을하고 있습니다.

답변:


13

쉬운.

다음 네트워크 설정을 가정하십시오.

네트워크 설정 예

다음과 같은 ~ / .ssh / config 파일을 사용할 수 있어야합니다.

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

여기서 아이디어는 SSH "foo"에 도달하는 방법을 알고 있으므로 SSH가 성공한다는 것입니다. 그리고 거기에서 "nc"를 baz로 할 수 있습니다. 내부 사설망에 "baz"와 함께 다른 호스트가있는 경우 "host baz"행에 추가 할 수 있습니다.

이것은 "gateway"가 "foo"의 게이트웨이 인 것처럼 기본적으로 "foo"호스트를 "baz"의 게이트웨이로 취급합니다.

명확한?


13

ghoti의 답변과 관련 "ssh ... nc %h 22"하여 OpenSSH 5.4부터 netcat ( ) 을 사용하는 대신 다음을 사용하여 직접 수행 할 수 있습니다 "ssh -W %h:22 ...". 이런 식으로 netcat이 올바른 위치에 설치되어 있는지 걱정할 필요가 없습니다.


1
좋은 지적입니다. 감사합니다. 이것은 오래된 질문이지만, 내 워크 스테이션에서 우분투를 실행하는 동안 서버 "게이트웨이"는 OpenSSH 5.3이 포함 된 오래된 Busybox Linux이고 서버 "foo"및 "baz"는 FreeBSD (OpenSSH)였습니다. 5.4). 어쨌든 적어도 하나 이상의 넷캣이 필요했을 것입니다.
Graham

@Graham 아니요 -W. 작동 하려면 클라이언트가 5.4 이상이어야 합니다. 서버 쪽의 포트 ​​포워딩 코드에 의존합니다.
kasperd

1

로컬 컴퓨터에 저장된 개인 키를 사용하여 개인 키 경로, 쉘 사용자 이름 및 호스트 이름 / IP 주소가 로컬-> 게이트웨이-> 대상 ssh 요구 사항으로 변경된 상태에서이 명령을 입력하십시오.

게이트웨이 / 점퍼 박스가 루트 하이재킹 될 때 개인 키 인증 (게이트웨이 및 로컬 ssh 에이전트 연결을 사용하여 하이재커에 개인 키가있는 것처럼 추가 호스트를 손상시키는)을 손상시키는 위험을 완화하기 위해 ProxyCommand가 에이전트 전달보다 선호됩니다.

서버에 SSH를 프록시하는 단일 명령 (로컬 컴퓨터에 두 개인 키 모두 유지) :

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

이것이 보호 된 네트워크에서 인터넷으로 뛰어 들기 위해하는 일입니다.

빌드시 코드로 작업하기 위해 랩톱을 사용 하고 있습니다. 빌드 는 인터넷 액세스가 제한되어 있기 때문에 github.com에서 저장소를 복제하려면 먼저 인터넷 액세스가없는 toolbox 로 이동해야 합니다. 그러나 인터넷이있는 gw 에 액세스 할 수 있습니다 .

이처럼 :

SSH 점프 회로도

.ssh/config에서 빌드 :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

설명.

  1. 관점은 build 입니다. 다른 서버에는 구성이 없습니다.
  2. 먼저, gw 를 얻으려면 toolbox 를 통해 그렇게해야 한다고 선언 합니다.
  3. 둘째, github.com 으로 가려면 gw 를 통해 그렇게해야 한다고 선언 합니다. 내부적으로 SSH는 이전 규칙을 사용합니다.
  4. 궁극적으로 git clone git@github.com:aRepo/There작동합니다!

명확한?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.