내 (세번째) PC에서 두 원격 호스트 사이의 scp


136

두 개의 원격 호스트가 있습니다.
host1-> 10.3.0.1
host2-> 10.3.0.2
둘 다 ssh 서버를 실행합니다.

ssh 서버는 host1의 포트 22와 host2의 포트 6969를 수신합니다. 이제 로컬 컴퓨터를 사용하여 ssh를 통해 host1 또는 host2에 로그인하지 않고 host1에서 host2로 무언가를 복사해야합니다. 같은 것

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

이 작업을 수행하는 방법은 두 호스트가 ssh에 다른 포트를 사용한다는 점에 유의하십시오.


원격 호스트에서 원격 호스트로 전송할 수 있는지 묻고 있습니까, 아니면 암호를 제공하지 않고 어떻게해야합니까?
glenn jackman

-P사용할 포트를 지정 하는 플래그가 존재 하지만 원격-원격 전송의 경우 호스트 별 포트를 지정하는 방법에 대해 정의 된 동작이없는 ssh ...
mveroone

답변:


216

과거에는 원격 시스템간에 파일을 복사하기 위해 scp( 순진하게 ) 호출되었을 때 작동 하는 방식 이 매우 불편했습니다.

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scp먼저 sshremote1에서 세션을 연 다음 scp거기에서 remote2로 실행 합니다. 이것이 작동하려면 remote1에서 remote2에 대한 인증 신임 정보를 설정해야합니다.

대신 현대적인 방법은 (몇 년 전만 구현 되었기 때문에 "모두 현대적"이며 아마도 모든 사람이 -3가능 하지 않기 때문에 scp) 두 단계가 필요합니다. 첫 번째 필수 단계는 ~/.ssh/config다음과 같이 remote1 및 remote2에 대한 연결에 대한 모든 옵션을 설정하는 데 사용 됩니다.

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/host2-id_rsa

이 방법은 명령에 필요한 모든 옵션을 통과 할 수있게된다 모호성없이 : 우리는 CLI의에 말했다 경우 예를 들어, 사용 포트 2222 위의 구성하지 않고, 우리가 할 언급했다 불분명했을 것이다 REMOTE1 하거나 REMOTE 2 , 및 암호화 키가 포함 된 파일도 마찬가지입니다. 이런 식으로 CLI는 깔끔하고 단순하게 유지됩니다.

둘째, -3다음과 같이 옵션을 사용하십시오 .

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

-3옵션 scp은 명령이 발행 된 PC를 통해 트래픽을 라우팅 하도록 지시 합니다 (전송의 제 3 자 임에도 불구하고). 이런 식으로 인증 자격 증명은 발급 PC 인 타사에만 있어야합니다.


6
나중에 참조 할 수 있도록 : EC2 인스턴스와 같은 자격 증명 파일을 공유하는 두 호스트간에 파일을 복사하는 경우 구성 파일이 필요하지 않습니다. 하나의 -i 인수는 두 호스트 모두에 연결하기에 충분합니다.
Artur Czajka

1
또한, 구글 컴퓨 트 엔진에 대해 주목할 필요가 거기에 추가에 대한 지원입니다 ~/.ssh/config: 파일 cloud.google.com/compute/docs/gcloud-compute 하지만 AWS이 같은 지원이 있다고 생각하지 않는다
modulitos

1
평소와 같이 출력이 표시되지 않으므로 팁을 사용하여 상세 모드를 활성화하십시오 -v.
holmberd

6

내가 이것을 마지막으로 시도했을 때 scp는 그렇게 할 수 없었습니다. 명령 줄이 괜찮아 보입니다. 이 해결 방법은 다음과 같습니다.

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"

내 scp 매뉴얼 페이지에 "두 원격 호스트 사이의 사본도 허용됩니다."
glenn jackman

1
고마워요. scp에 -P 플래그를 줄 수 있습니다 (일부 BSD 사람들이 작성했습니다. 인수 처리가 너무 비극적이기 때문에 :-().하지만 원격 호스트에서 다른 포트를 지정할 수없는 것 같습니다. 죄송합니다. 하지만 만이 해결 방법은 왼쪽, 오른쪽, 생각 (또는 난이도 솔루션이 많이있다, SSH를 사용하지만 SCP를 피 - 예를 들어, sftpfs를 들어,하지만 그들은 간단한되지 않습니다). 나는 포트 설정 내 해결 방법을 확장했다.
user259412

4

제 경우에는 -3논쟁 없이 원격에서 원격 복사를하고있었습니다 . '-P'매개 변수로 제공된 포트는 첫 번째 서버에서 작동하지만 포트 22는 두 번째 서버에서 사용됩니다.

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

해결책은 /etc/ssh/ssh_config파일 을 편집하고 server1다음 줄을 추가하는 것입니다.

Host *.otherdomain.com
   Port  1234

이런 식으로 포트 1234가 두 포트에 모두 사용됩니다. 다를 수도 있습니다.

이 솔루션은 통신이 직접적이기 때문에 이전 솔루션보다 처리량이 더 좋습니다.


perez comman 회선에서 서로 다른 두 원격 시스템에 대해 두 개의 다른 포트를 통해 scp를 달성 할 수있는 방법이 있습니까?
Red Bottle

4

소스 및 대상은 scp : // [user @] host [: port] [/ path] 형식으로 URI로 지정할 수 있습니다.

그래서 당신은 실행할 수 있습니다 :

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.