포트 전달을 사용할 때 대용량 scp 파일 전송을 재개하려면 어떻게해야합니까?


10

기계가 몇 홉 떨어져 있고 파일을 전송하려면 포트 전달을 설정해야합니다.

편집 : 분명히하기 위해 원격 컴퓨터에 액세스하려면 여러 홉이 필요합니다. 내 컴퓨터에서 10.255.xx에 액세스 할 수있는 VPN을 설정했습니다.이 VPN을 통해 연결할 수있는 유일한 컴퓨터입니다. .xx에 로그인하면 다른 컴퓨터에 연결할 수 있습니다. .yy는 그 중 하나입니다.

내 컴퓨터에서 :

ssh -L 4567:localhost:4567 me@10.255.x.x

그런 다음 해당 머신에서 :

ssh -L 4567:localhost:22 me@10.255.y.y

그때 할 수 있습니다

scp -P 4567 me@localhost:/path/to/large/file.gz .

나는이 실행을 과장하여 떠났고, 어느 시점에서 이전이 죽었다는 것을 알았습니다.

전송을 재개하기 위해 ssh를 통해 rsync를 사용하는 몇 가지 제안을 보았지만 어떻게 설정 해야할지 모르겠습니다. 이것이 가능한가?


이 모든 홉은 무엇입니까? 하지 않을까요 scp me@10.255.x.x:/path/to/large/file.gz .정확히 같은를 달성? 클라이언트와 서버에 어떤 버전의 scp (ssh)가 설치되어 있습니까?
Dennis

@Dennis : scp는 전송 재개를 지원하지 않습니다. 권장 사항에 따라 다운로드를 다시 시작하십시오.
chris

일부 버전은 작동합니다 (노트북의 scp는 작동하지만 VPS는 그렇지 않습니다). 내가 묻는 이유는 홉이 나에게 불필요 해 보이고 홉이없는 재 동기화가 훨씬 쉬울 것입니다.
Dennis

이 답변도 도움이 될 것입니다 : unix.stackexchange.com/a/43097/14084
Bernhard

답변:


9

일부 scp 버전 (소스 컴퓨터의 버전이 핵심 인 것 같습니다)에서 scp 명령을 다시 실행하면 전송을 다시 시작하기에 충분합니다. 그러나 조심하십시오! 버전이 부분 전송을 지원하지 않으면 부분 파일을 덮어 씁니다.

다음 rsync 스위치는 scp가 지원하지 않는 경우 손상된 전송을 재개하는 데 유용합니다.

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

명령

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

원하는 효과가 있어야합니다. -pssh의 경우 스위치는 소문자 여야합니다.


대상 서버의 네트워크 구성 방식으로 인해 홉이 필요합니다. ssh를 통한 rsync 사용의 문제점은 로컬 포트 ​​4567을 사용해야하며 파일이 10.255.xx 서버에 존재하지 않는다는 것입니다.
chris

내 실수. 나는 그것이 10.255.y.y클라이언트 컴퓨터 라고 가정했다 .
Dennis

내 답변을 업데이트했습니다.
Dennis

rsync를 사용할 방법이 없으면 어떻게해야합니까? 제 경우에는 원격 호스트에서 ftp 만 사용할 수 있습니다.
dr.dimitru

1
@Enzo SCP에 관한 질문입니다. 그 대답은 scp에 관한 것이 어야 합니다. 문제는 scp 도구가 아니라 불완전한 scp 전송에 관한 것입니다. 문자 그대로 전송을 재개하기 위해 ssh를 통해 rsync를 사용하는 몇 가지 제안을 보았지만 어떻게 설정 해야할지 모르겠습니다. 이것이 가능한가? 바닥에.
Dennis

3

scp 대신 sftp를 사용하십시오

귀하의 경우 :

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

sftp 매뉴얼 페이지에서 :

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

rsync는 기본적으로 ssh를 사용하므로 rsync의 -e 스위치를 사용하여 정확한 ssh 명령을 지정해야 할 수도 있습니다. 또한 전송이 재개 될 수 있도록 불완전한 파일을 보관해야하는 --partial이 있습니다.


-1

터널의 요점이 무엇인지 알 수 없으므로 문제를 해결하는 방법은 다음과 같습니다.

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

로컬 시스템 (localhost)에서 원격 시스템 (remotehost)으로의 역방향 터널이 열립니다. $ tunnelPort는 원격 호스트에서 터널을 찾을 포트입니다. $ localSSHPort는 로컬 sshd가 실행되는 포트이고 $ remoteSSHPort는 원격 호스트의 sshd가 수신하는 위치입니다.

이제 (reverse!) 터널 안에 있으므로 Dennis가 제안한 내용을 어느 정도 수행 할 수 있습니다.

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

-a 및 -z 플래그는 rsync 매뉴얼 페이지에 설명되어 있으므로 자세히 설명하지 않겠습니다. 이제 원격 호스트에서 rsync를 실행하면 모든 데이터가 $ tunnelPort 포트로 푸시되고 로컬 호스트의 sshd $ localSSHPort로 전달됩니다.

도움이 되었기를 바랍니다.


@ingenous : 터널에 대한 설명을 추가했습니다.
chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.