서버에서 2 단계 떨어진 파일 가져 오기

다음과 같은 상황이 있습니다.

  1. 내 기계
  2. 게이트웨이 머신
  3. 대상 기계

# 2와 # 3에 대한 루트 권한이 없습니다. 또한 시스템 # 2에 정보 (200MiB 이하)를 실제로 저장할 수는 없습니다 (네트워크의 나머지 부분으로가는 게이트웨이가 아니기 때문에). 머신 # 3에는 약 3GiB 크기의 폴더가 있으며 로컬로 복사하고 싶습니다. # 1에서 # 3으로 SSH 할 수 없지만 # 2에서 SSH로 # 3으로 SSH 할 수 있습니다. # 2와 # 3 사이에 공개 개인 키 쌍을 설정할 수도 없지만 # 1과 # 2 사이에 키 쌍이 설치되어 있습니다.

일반적으로 SSH와 tar의 조합을 사용 하여이 작업을 수행합니다.

ssh name@host "tar cf - folder" > folder.tar

그러나이 경우 일종의 중첩이 필요 하며이 작업을 수행 할 수 없습니다.

그렇다면 # 3에서 # 1로 데이터를 얻는 좋은 방법은 무엇입니까?



답변

machine2를 통해 SSH 터널을 만든 다음 다른 세션에서 터널에 연결할 수 있습니다.

예를 들어, machine1에서 두 개의 CLI 세션을여십시오. 첫 번째 세션에서 다음을 실행하십시오.

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

두 번째 세션에서 다음을 실행하십시오.

MACHINE1 $ ssh -p 2022 <user>@localhost

첫 번째 명령으로 발생하는 일은 로컬 포트 ​​(machine1의 2022)가 machine2에 대한 SSH 연결을 사용하여 machine3의 포트 22로 터널링되는 것입니다.

두 번째 명령을 사용하면 새로 열린 로컬 포트 ​​(2022)에 연결되며 machine3에 직접 연결하는 것과 같습니다.

일반적인 파일 전송 프로세스를 사용하려면 다음을 수행하십시오.

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

또는 rsync에 익숙해지고 대신 다음과 같은 작업을 수행 할 수 있습니다.

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

최종 목표는 타르볼을 얻는 것이 아니라고 가정합니다.


답변

최신 버전의 SSH의 마스터 세션 기능을 사용할 수도 있습니다. 여기에 설명되어 있습니다 :

https://ko.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

아마도 필요한 것은 .ssh / config를 편집 / 생성하는 것입니다. 마스터 세션을 제어하는 ​​정의를 추가하십시오.

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

그런 다음 첫 번째 홉 서버 정의를 다음과 같이 지정할 수 있습니다.

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

그리고 두 번째 홉은 첫 번째 홉 서버를 프록시로 사용합니다.

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

~ / .ssh / cm_socket 디렉토리를 작성하는 것을 잊지 마십시오. 구성 권한은 644 여야합니다.

그런 다음 두 번째 서버와 직접 SSH 또는 SCP를 연결할 수 있어야합니다. 이와 같이 연결된 서버가 더있을 수 있습니다.


답변