매일 원격 서버와 동기화하려는 로컬 드라이브에 자주 백업합니다.
대상 서버는 SSH 키 (암호 없음) 액세스 전용으로 구성되어 있습니다. 해당 서버의 기본 SSH 키가 암호로 보호되어 있기 때문에 무인 백업에 사용할 두 번째 SSH 키 (암호로 보호되지 않음) + 사용자를 만들었습니다. 이 방법으로 cron이 실행될 때 암호를 입력 할 필요가 없습니다 .
cron과 rsync를 사용하고 있으며 모든 명령이 개별적으로 작동하지만 결합하면 실패합니다.
문제 해결이 진행되는 동안 가장 먼 곳
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
어떤 오류를 반환
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
이 문제를 해결하는 방법에 대한 팁이 있습니까?
지금까지 시도한 아이디어는 다음과 같습니다.
- 크론은 확실히 실행 중입니다
ps aux | grep cron
/ var / log / syslog에 이상한 것은 없습니다
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
백업 사용자가 작업 할 때 터미널에서 원격 서버로 SSH
ssh backups-user@XX.XX.XX.XX
- 터미널에서 명령을 실행하면 완벽하게 작동합니다
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
backups-user 키의 경로를 수동으로 지정해도 효과가 없습니다.
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
작동하지 않는 명령을 간단한 테스트 명령으로 바꾸면 작동합니다.
echo "Hello world" > ~/Desktop/test.txt
컴퓨터에서 소리를 지르거나 맹세해도 아무런 효과가 없었습니다 (그러나 일시적으로 기분이 좋아졌습니다).
편집 1 :
여기 내 crontab 파일과 그것이 호출하는 스크립트가 있습니다.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
과
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
편집 2 :
명확히하기 위해 /var/log/auth.log
대상 서버에 줄 Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
이 포함되어 있습니다. 더 이상 매분마다 cron을 로컬로 실행하지 않기 때문에 혼란 스럽지만 매분마다 새 항목이 서버 로그에 나타납니다. 모든 Crontab 파일서버의 사용자 (루트 포함)의 이 비어 있으며 아무 것도 수행하지 않습니다.
또한 사용자 '백업 전용'은 전용 SSH 키가 내 데스크탑 시스템에 복사 된 상태로 서버에서만 작성되었으며 제한된 권한으로 작성되었습니다. 명령을 수동으로 실행할 때 모든 것이 작동하기 때문에 이것이 갈 길이라고 가정합니다.
위에 게시 된 crontab 파일은 내 데스크탑 컴퓨터의 사용자 'tom'입니다. 내 의도는 사용자 '백업 전용'으로 서버에 로그인 해야하는 스크립트를 호출하는 것입니다. 방금 백업 스크립트를 실행하려고 시도했지만 성공적으로 연결되고 작동했습니다. 작동하지 않는 크론 작업을 작성한 동일한 사용자 인 사용자 'tom'으로 데스크탑에서 실행했습니다. 성공적인 로그인에 해당하는 서버 로그의 출력은 다음과 같습니다.
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
됩니다. 이 로그 라인이 서버 에서 왔으며 올바른 라인 인지 100 % 긍정적 입니까? 게시 한 crontab은 백업 전용 ? 또한 ID 파일을 수동으로 추가하십시오.rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
Edit 2에 게시 된 해당 줄 은 서버에서 실행되는 cron을위한 것이며 로그인 시도와 관련이 없습니다. tail -f /var/log/auth.log
cron을 통해 스크립트를 실행하는 동안 서버에서 시도해 볼 수 있습니까 ? 또한 이것이 작동하는지 확실하지 않지만 더 많은 오류가 발생하는지 확인하기 위해 첫 번째 env
명령 을 시도 할 수 rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
있습니까?