사이에 "프록시" 머신을 사용하여 SSH를 통해 파일을 다운로드합니다.

사이에 "프록시" 머신을 사용하여 SSH를 통해 파일을 다운로드합니다.

컴퓨터 C에서 컴퓨터 A로 파일을 다운로드해야 합니다. scpA에서 C에 직접 액세스할 수 없기 때문에 이 작업을 수행하려면 머신 B(이 작업을 수행하는 데 사용하고 있음)에 로그인해야 합니다 .

단일 명령이나 스크립트를 사용하여 C에서 A로 파일을 다운로드할 수 있습니까?

답변1

A와 C가 머신 B에서 접근 가능하다면,

새 버전은 두 원격 컴퓨터 간에 파일을 복사할 수 있는 스위치를 scp지원합니다 .-3

 -3      Copies between two remote hosts are transferred through the local host.  Without this option the data is copied directly between the two remote hosts.  Note that this option disables the
         progress meter.

$ scp -3 user1@C:/file user2@A:/file

답변2

모든 머신에서 SSH 액세스를 구성한 경우 머신 B를 통해 SSH 터널을 설정할 수 있습니다.
첫 번째 단계:

[user@A ~]$ ssh -f -L LOCALPORT:IP_ADDR_C:22 user_at_B@IP_ADDR_B

명령이 실행되기 전에 키를 백그라운드에 둡니다 -f. 열쇠를 ssh사용하는 것이 좋습니다 -N.
에서 man ssh:

-N 원격 명령을 실행하지 않습니다. 이는 포트만 전달하는 데 유용합니다(프로토콜 버전 2만 해당).

이제 다음을 사용할 수 있습니다 scp.

[user@A ~]$ scp -P LOCALPORT user_at_C@localhost:<your_file_at_C> <local_file>

예를 들어, 머신 뒤에 있는 머신의 사용자 홈 디렉터리에서 파일을 다운로드합니다 test.txt.me192.168.1.1host.example.com

ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .

답변3

아주 쉬운 방법이 있습니다!

  1. 먼저 게이트웨이에 연결합니다.

    ssh user@B
    
  2. 복사 시작 C -> A

    ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
    

ddstderr에 작성된 메시지를 삭제하려면 status=none해당 버전에서 dd지원하는 경우 이 옵션을 사용하거나 2> /dev/null.

8.4 버전에는 dd문서에 있음에도 불구하고 작동하지 못하게 하는 버그가 있다는 점에 유의하세요.status=none

답변4

sshB에서 C로 터널을 설정한 다음 A에서 B의 포트로 터널을 설정 하면 scp파일을 다운로드하는 데 사용됩니다. 정보 페이지가 많고 Google 검색이 첫 번째 검색으로 이어졌습니다.여기.

관련 정보