나는 /tmp/
때때로 내 디렉토리를 스캔하여 마지막으로 이 작업을 수행한 이후 어떤 파일이 변경되었는지 확인하고 싶습니다. 변경된 모든 파일은 디렉터리 구조를 유지하면서 백업으로 원격 서버에 복사되어야 합니다. 비슷한 것을 시도했지만 우분투에서는 제대로 작동하지 않습니다.Permission denied (publickey).
#!/bin/bash
TARGET=/bkp
[email protected]
SOURCE=/tmp
touch $TARGET/last_sync
rsync \
-ahrv \
--update \
-e \
--files-from=<ssh -i /home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" \
$HOST:$SOURCE \
$TARGET
rsync -ahv $TARGET/last_sync $HOST:$SOURCE
내 계획은 원본 컴퓨터에 설치하는 것입니다.
ubuntu@source:~/$ tree /tmp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
├── file4.txt
처음 실행하면 아래와 같이 원격 컴퓨터에 복사되어야 합니다.
ubuntu@remote:~/$ tree /bkp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
├── file4.txt
몇 시간 후 /tmp/dir1/file5.txt
새 파일이 추가되고 /tmp/file4.txt
파일이 변경되었습니다.
스크립트를 실행한 후 원격으로 동기화해야 합니다(두 개의 파일이 추가됨).
ubuntu@remote:~/$ tree /bkp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
| | -- file5.txt <-- ADDED
├── file4.txt <-- ADDED (replaced)
나는 macos -> ubuntu에서 비슷한 것을 달성할 수 있었지만 scp와 더 많은 "로직"을 사용하여 지난 N 시간 동안 변경된 파일을 확인하고 N 시간마다 스크립트를 실행했습니다.
답변1
Permission denied (publickey)
가장 큰 문제는 오류가 발생하는 것 같습니다 . 이는 인증서 기반 인증을 사용할 때 발생하는 일반적인 인증 문제입니다 ssh
. 세 번 호출 ssh
하지만 기본이 아닌 개인 인증서(키)를 한 번만 제공하는 코드를 살펴보세요.
rsync
업데이트 수행ssh
find
최신 파일을 찾기 위해 호출됨rsync
동기화 비콘 파일 복사
이 연결에 사용하기에 적합한 키 라면 /home/ubuntu/ssh_key.pem
매번 참조해야 합니다.
두 번째 문제는 대부분의 코드에서 구문이 정말 잘못된 것처럼 보인다는 것입니다. 코드를 전달하기 위해 ServerFault에 대한 내 조언을 받아들인 것으로 알고 있습니다.https://shellcheck.net/bash
, 그러나 이제 코드를 구문 분석할 수 있지만 여전히 구문상 잘못된 부분이 있습니다 . 예를 들어,
rsync \ -ahrv \ --update \ -e \ --files-from=<ssh -i /home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" \ $HOST:$SOURCE \ $TARGET
매개변수가 있는 옵션이 함께 연결되도록 다시 작성하면 다음과 같은 결과를 얻습니다.
rsync \
-ahrv \
--update \
-e --files-from=
-i \
/home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" $HOST:$SOURCE $TARGET
<ssh
ssh
읽을 수 있는 파일이 없습니다 .표준 입력, 그리고 아무것도 처리할 수 없습니다--files-from=
참조된 명령이-e
존재하지 않습니다.- 4개의 소스 파일/디렉토리가 복사됩니다
$TARGET
(나머지 명령이 작동하는 경우).
rsync
나는 당신이 달성하려는 것이 무엇인지 알 수 있다고 믿지만 왜 일반 작동 모드에서 사용하고 파일을 직접 복사 하지 않는지 완전히 확신하지 못합니다 . 불필요한 find
. 비콘 파일을 동기화할 필요가 없습니다.
#!/bin/bash
[email protected]
source=/path/to/source
target=/bkp
rsync -av -e 'ssh -i /home/ubuntu/ssh_key.pem' "$rhost:$source/" "$target"