ssh ProxyCommand는 실제로 어떻게 작동합니까?


8

ssh의 ProxyCommand 기능을 사용하는 데 익숙하며 여러 요새 호스트를 통해 홉하여 최종 호스트에 효율적으로 도달 할 수 있습니다. 그러나 백엔드에서 실제로 어떻게 작동하는지 이해할 수없는 것 같습니다.

예를 들어. 다음 구성 파일이 있습니다.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh user@bastion.com -W %h:%p"

호스트에 연결하는 경우에 연결하기 final전에 ProxyCommand가 실행 된다는 것을 알고 final.com있습니다. 그러나 나는 여전히 연결 순서를 이해하지 못하는 것 같습니다.

그리고 옵션 -W %h:%p은 무엇을합니까? netcat 기능이며와 비슷하다는 것을 이해합니다 nc %h %p.

내가 이해하는 한 일련의 작업이 있습니다. 내가 틀렸다면 알려주세요. 내 예제에서 위에서 지정한 구성 파일을 사용합니다.

  1. 사용자가 입력 ssh final
  2. bastion.com에 대한 ssh 연결이 작성되었습니다.
  3. netcat 터널은 bastion.com에서 final.com의 포트 22로 만들어집니다. netcat의 stdin은 bastion.com과의 연결에서 얻은 쉘에 연결됩니다.
  4. 이제 시스템에서 final.com으로 연결되었습니다. 이 연결의 첫 절반은 시스템에서 bastion.com으로의 ssh 연결입니다. 이 연결의 후반부는 bastion.com에서 final.com으로 연결되는 netcat 터널입니다.
  5. 이제 ssh final명령은 위의 연결을 프록시로 사용하고이 기존 연결을 통해 데이터를 터널링합니다.

또한이 기술이 ssh stacking 으로도 알려져 있는지 알고 싶습니다 .

줄 바꿈 추가

답변:


8

3) netcat 터널은 bastion.com에서 final.com의 포트 22로 생성됩니다.

거짓, 넷캣이 없습니다.

1) 사용자가 ssh finallocalhost에 입력 합니다. 그러면 부모 ssh 프로세스가 시작됩니다.
2) 부모 ssh는 파이프로 리디렉션 된 I / O로
자식 ssh를 만듭니다. 3) 자식 ssh는 bastion.com에 대한 연결을 만듭니다.
4) sshdbastion.com 의 프로세스는 final.com에 tcp 연결을 만듭니다 .22
5) ssh 채널이 localhost와 bastion.com 사이의 기존 ssh 연결에 추가됩니다.
6) 상위 ssh는 핸드 셰이크 데이터를 파이프, 하위 ssh에 기록합니다. 파이프에서이를 읽고 ssh 채널을 통해 bastion.com의 sshd로 보냅니다. sshd는 그것을 읽고 final.com에 연결된 소켓에 씁니다. 마찬가지로 데이터는 final.com에서 localhost로 전송됩니다.


답변 주셔서 감사합니다. 이 기술은 ssh 스태킹이라고도하며 이름이 없습니까?
나루토 우즈 마키

2
참고 문헌을 인용 해 주시겠습니까? 예 : 수동. spec ..
qweruiop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.