머신 간에 멀티홉 SCP 전송을 어떻게 수행합니까?

머신 간에 멀티홉 SCP 전송을 어떻게 수행합니까?

내 컴퓨터 A에서 서버 C로 파일을 복사하고 싶지만 서버 B를 통해서만 서버 C에 액세스할 수 있습니다.

B서버로 먼저 전송하지 않고, 로그인 후 C서버로 전송하는 방식인데, SCP나 유사 프로그램으로 바로 파일전송이 가능한가요?

(Emacs 트램프 모드에는 파일을 원격으로 편집할 수 있는 기능이 있습니다).

답변1

대신 -o에 옵션을 추가할 수 있습니다 .scp.ssh/config

scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path $host:$destination_path

$jump_host이 경우에는 "서버 B"입니다.

답변2

OpenSSH를 가정하고 .ssh/config의 SSH 구성에 추가하세요.

Host distant
ProxyCommand ssh near nc distant 22

이렇게 하면 SSH는 Near라는 이름의 컴퓨터를 통해 프록시를 사용하여 Distant라는 컴퓨터에 "직접" 연결할 수 있습니다. 그런 다음 scp 및 sftp와 같은 애플리케이션을 원격 시스템에 사용할 수 있습니다.

이것이 작동하려면 Near라는 이름의 컴퓨터에 'nc'(일명 netcat)가 설치되어 있어야 합니다. 그러나 많은 현대 시스템에는 이미 이러한 기능이 탑재되어 있습니다.

towo의 tar 솔루션은 tar의 구문과 작동 규칙을 암기했다면 일회성 문제에 더 효과적입니다.

답변3

(B) 시스템 근처의 서버에 최신 버전의 SSH를 사용하면 다음이 netcat 없이 작동합니다.

Host distant
    ProxyCommand ssh near -W distant:22

그러나 가까운(B) 시스템에서는 AllowTcpForwarding이 yes(기본값)여야 합니다.

편집: B에 OpenSSH 5.4+가 필요합니다.

답변4

인증을 위해 인증서를 사용해야 하는 경우에도 가능하고 비교적 쉽습니다(AWS 환경에서 일반적임).

아래 명령은 의 파일을 의 remotePath컴퓨터 server2로 직접 복사합니다 localPath. 내부적으로 scp 요청은 server1.

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

다른 방법도 작동합니다(파일 업로드).

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" <localpath> user2@server2:/<remotePath>

대신 비밀번호 인증을 사용하는 경우

scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

두 서버 모두에서 동일한 사용자 자격 증명을 사용하는 경우:

scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>

-W옵션은 OpenSSH의 새 버전에 내장되어 있으므로 배포판에서 기능을 백포팅하지 않는 한 최소 버전(5.4)이 있는 시스템에서만 작동합니다. 예를 들어 RHEL6 OpenSSH 5.3p1에 이 기능이 포함되어 있습니다. 릴리스 노트에 따르면:http://www.openssh.com/txt/release-5.4

ssh(1)에 'netcat 모드'를 추가했습니다: "ssh -W 호스트:포트 ..." 이는 클라이언트의 stdio를 서버의 단일 포트 전달에 연결합니다. 예를 들어 SSH를 ProxyCommand로 사용하여 중간 서버를 통해 연결을 라우팅할 수 있습니다.

%h%p호스트와 포트에 대한 자리 표시자입니다 .

관련 정보