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


14

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

  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로 데이터를 얻는 좋은 방법은 무엇입니까?

답변:


27

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/

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


2
사용 ProxyCommand및 ssh -W두 ssh명령을 단일 명령 줄로 결합 할 수 있습니다. 최신 버전의 OpenSSH 클라이언트가있는 경우 단일 ssh명령으로 모든 작업을 수행 할 수있는 인수가 있습니다 .
— kasperd

rsync; +1
— NieDzejkob

많은 파일을 전송하면 하나의 큰 파일을 전송하는 데 시간이 더 걸리므로 tar를 사용합니다. rsync가 이것을 해결합니까?
— Cheiron

원격 전송을 수행 할 때 rsync 체크섬은 전송중인 데이터 (수신 측에서 디스크에 쓰기 전에)를 전송하므로 파일을 전송하는 데 시간이 더 걸립니다. 그러나 그것은 잘 보냈다.
— Gene

5

최신 버전의 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를 연결할 수 있어야합니다. 이와 같이 연결된 서버가 더있을 수 있습니다.


3
귀하의 링크를 읽은 ControlMaster후 프록시에 멀티플렉싱 / 이 필요 하다고 생각하지 않습니다 . 이 위키 북에서 가장 관련있는 페이지는 다음과 같습니다. en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
— IMSoP

그래, 난 동의. 여러 가지 방법이 있습니다. 그러나 나는 마스터 세션이 가장 우아하다고 생각합니다. 개인 취향에 관한 것입니다. ;-)
— Jaroslav Kucera

우리 중 한 사람이 무언가를 잘못 이해했습니다. 내가 볼 수있는 한, "마스터 연결"은 네트워크 리소스를 효율적으로 사용하는 것과 관련이 있으며 질문과는 아무런 관련이 없습니다. 그것은 다른 방식이 아니며 현재의 작업과 관련이 없습니다.
— IMSoP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.