2016-07-27 5 views
0

원격 호스트간에 rsync를 실행해야합니다 (이유는 나중에 설명합니다). rsync에서 지원되지 않습니다 (맨 페이지 참조). 그러나, 나는 그것이 ssh 터널을 사용하여 가능해야한다고 생각한다. 나는 그것이 지금까지 작동하도록 할 수 없었고 나는 잘못된 것을하고 있다고 생각합니다. 다음 스 니펫을 살펴보십시오.두 원격 간의 Rsync

ssh -R localhost:50000:remotesource:22 [email protected] -f -N 
sleep 5 #To wait for the tunnel to establish 
ssh [email protected] rsync -e "ssh -p 50000" --progress --append-verify [email protected]:~/sourcefiles ~/destdir' 

이것은 기본적으로 rsync 내부 SSH 인증 중에 끊깁니다. 그냥 그것을 테스트하기 위해, 나는 remotedestination에 연결하고 터널을 통해 원격 소스로 ssh하려고 노력하고 그게 효과가! rsync가 다르게 여기에있는 것을 잊어 버리고 있습니까?

왜 이것을하고 싶습니까? 일반적인 호기심에도 불구하고 리모트 소스는 데이터를 푸시 할 수없고 리메 네 스티 네이션 (remotedestination)에만 공유 계정이있는 컴퓨터입니다. 연결 문제가 자주 발생하기 때문에 오류가 발생할 경우 rsync를 다시 시작하기위한 스크립트를 작성하려고했습니다. 이를 위해 키 파일 (sshpass 또는 유사하게 설치되지 않음)을 통해 인증해야합니다. 하지만 공유 계정의 홈 디렉토리에 개인 키를 저장하지는 않을 것입니다. 따라서 로컬 PC를 통해 인증이 이루어지기를 바랍니다.

누군가 내 오류를 지적 할 수 있기를 바랍니다. 나는 그것을 보지 못합니다 :-) 감사합니다!

답변

1

나는 여기 매듭에 묶여 있다고 생각한다!

포트 22로 포트를 생성하면 방화벽을 통해 라우팅 할 때만 도움이됩니다. 인증을 피하는 데 도움이되지는 않습니다. 어쨌든 터널은 "localpc"에서 실행중인 프로세스의 연결 만 허용하므로 "remotedestination"에서 실행중인 rsync에서 사용할 수 없습니다.

"remotedestination"에서 공유 계정에 자격 증명을 누설하고 대화 형 암호를 입력 할 수 없다면 문제가 발생합니다. authorized_keys에 의해 제한되는 키를 사용할 수는 있지만 여전히 안전하지는 않습니다. ssh -A을 사용하여 ssh-agent 연결을 "remotedestination"으로 전달할 수 있지만 동일한 사용자 액세스 권한을 가진 도청자도 해당 소켓을 사용할 수 있습니다 (실제 해커가 실제로 스파이가 아닌 경우이 방법은 적어도 상당히 은밀합니다) .

아마도 가장 안전한 방법은 ssh -A 에이전트 전송을 사용하여 "원격 소스"에서 전송을 시작하는 것입니다.

또는 데이터가 크거나 증분 업데이트가 중요하지 않은 경우 scp을 시도 할 수 있습니다. 이는 원격 소스와 대상을 모두 처리 할 수 ​​있으며 가능한 경우 원본에서 대상으로 직접 데이터를 이동합니다. 단점은 항상 모든 데이터를 복사하려고한다는 것입니다.

+0

나는 그것이 불행하다는 것을 알았다. 그것에 대해 생각할 것입니다. 데이터 양에 관해, 우리는 몇 TB를 이야기하고 있습니다. 그래서 연결이 끊어진 후에 rsync를 다시 시작할 수 있어야합니다. – Alex

+0

그 문제에 대한 나의 개인적인 해결책은 타이프했을 때 암호를 입력 할 수있는 작은 스크립트를 작성하는 것입니다. – ams

+0

sshpass가 설치되어 있지 않으므로 어떻게해야합니까? – Alex