중간 머신에 데이터 사본을 유지하려면 server1을 참조로 사용하여 로컬 사본을 업데이트 한 다음 로컬 사본을 참조로 사용하여 server2에서 백업을 업데이트 한 스크립트를 작성하면됩니다.
#!/bin/sh
rsync user@server1:/path/to/stuff /path/to/loca/copy -a --delete --compress
rsync /path/to/loca/copy user@server2:/path/to/where/stuff/should/go -a --delete --compress
간단한 스크립트를 사용한다는 것은 모든 것을하기 위해 단일 명령을 원한다는 것을 의미합니다. 데이터가 민감한 경우에는 물론 보안상의 문제가되지 않을 수 있습니다 (귀하 또는 회사의 다른 사람이 랩톱에서 복사본을 띄우고 싶지 않을 수 있음). server1이 로컬 인 경우 다음에 로컬 사본을 신속하게 재구성하므로 나중에 로컬 사본을 삭제할 수 있습니다.
서버가 서로 직접 통신 할 수 있도록 터널을 구성하면 다음과 같이 가능합니다.
- 서버 2에서 / bin / sh를 / usr / local / bin / shforkeepalive로 복사하십시오. 복사본 대신 기호 링크를 사용하면 / bin / sh를 패치하는 보안 업데이트 후에 업데이트 할 필요가 없습니다.
서버 2에서 몇 초 동안 루프 절전 모드를 수행 한 다음 소량의 텍스트를 출력하는 스크립트를 작성하고 이제 sh의 "복사"를 사용하십시오.
#!/usr/local/bin/shforkeepalive
while [ "1" != "0" ]; do
echo Beep!
sleep 5
done
echo
SSHd가 ssh 클라이언트의 keep-alive 패킷을 무시하도록 구성되어 있어도 세션이 시간 초과 될 정도로 오랫동안 유휴 상태가 아니기 때문에 아마도 필요하지 않습니다.
이제 랩톱에서 백그라운드에서 역방향 터널을 시작하고 rsync를 사용하여 복사 작업을 수행하도록 지시 한 다음 루핑 스크립트를 종료하여 역방향 터널을 종료하는 스크립트를 작성할 수 있습니다 (SSH 세션을 닫습니다).
#!/bin/sh
ssh user@server2 -L2222:127.0.0.1:22 /usr/local/bin/keepalivesctipt &
ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
ssh user@server2 killall shforkeepalive
이것이 작동하는 방식 :
- 1 행 : 표준 "이 스크립트를 해석하는 데 사용하는 명령"마커
- 2 행 : 리버스 터널로 SSH 연결을 시작하고이를 통해 keepalive 스크립트를 실행하여 열어 둡니다. 후행은 bash가 백그라운드에서 이것을 실행하도록 지시하므로 다음 줄이 끝나기를 기다리지 않고 실행할 수 있습니다.
- 3 행 : server1이 server2를 볼 수 있도록 위의 터널에 연결할 터널을 시작하고 rsync를 실행하여이 배열을 통해 복사 / 업데이트를 수행하십시오.
- 4 행 : rsync 작업이 완료되면 두 번째 SSH 호출이 반환되고 첫 번째 ssh 세션 인 keep-alive 스크립트를 종료합니다.
이것은 특별히 깨끗하지는 않지만 작동합니다. 위의 테스트를 수행하지 않았으므로 조정해야 할 수도 있습니다. rsync 명령을 server1에서 단일 행 스크립트로 만들면 호출하는 ssh 명령에서 '와 같은 문자를 이스케이프 처리해야하는 필요성을 줄일 수 있습니다.
BTW : 두 서버가 서로를 직접 볼 수없는 이유에 대해 "조회하지 마십시오"라고 말하지만 그 이유는 종종 있습니다. 온라인 백업이 유지되는 내 홈 서버와 서버는 서로 로그인 할 수 없으며 모든 사용자에 대해 다른 암호 + 키를 갖습니다. 즉, 두 서버 중 하나가 해킹되면 쉽게 액세스 할 수 없습니다. 온라인 백업이 더 안전 해 지도록 다른 시스템을 해킹하십시오 (실시간에서 내 데이터를 악의적으로 삭제하는 사람은 백업을 업데이트하여 해당 백업을 삭제하는 기능을 사용할 수 없으므로 기본 백업 사이트를 직접 만질 수는 없습니다). 두 서버 모두 다른 곳의 중간 서버에 연결할 수 있습니다. 라이브 서버는 아침 일찍 rsync를 통해 백업을 중간 머신으로 푸시하도록 설정되고 백업 서버는 연결을 위해 (나중에 1 단계를 완료하기 위해 잠시 후에) 설정됩니다 업데이트를 수집합니다 (rsyc를 통해 여러 백업 기간을 유지하기 위해 스냅 샷 단계). 이 기술은 귀하의 상황에서도 사용할 수 있으며, 그렇다면 훨씬 더 깨끗한 방식으로 작업하는 것이 좋습니다.
편집 : server2의 / bin / sh 사본과 별도의 keep-alive 스크립트로 인해 발생하는 모든 문제를 피하기 위해 Aaron의 해킹을 병합하면 랩톱 의이 스크립트가 전체 작업을 수행해야합니다.
#!/bin/sh
ssh user@server2 -L2222:127.0.0.1:22 sleep 60 &
pid=$!
trap "kill $pid" EXIT
ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
위와 같이 rsync는 localhost : 2222에 연결하여 터널을 노트북의 localhost : 2222로 전달하고 다른 터널을 통해 다른 터널을 통해 server2의 localhost : 22로 전달합니다.
편집 2 : server1이 server2로 직접 인증 할 수있는 키를 가지고 있지 않다면 (터널없이 server2를 볼 수는 없지만) 다음과 같이 단순화 할 수 있습니다.
#!/bin/sh
ssh user@server1 -R2222:123.123.123:22 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
여기서 123.123.123.123은 server2의 공개 주소이며 스크립트 대신 copy + paste one-liner로 사용할 수 있습니다.