서버에서 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
사용 ProxyCommandssh -Wssh명령을 단일 명령 줄로 결합 할 수 있습니다. 최신 버전의 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.