원격 서버 : cronjob을 통해 gpg와 함께 ssh와 함께 rsync를 사용할 때 권한이 거부되었습니다 (공개 키).

Maddingl

cronjob을 통해 원격 VPS를 정기적으로 백업하고 싶습니다. 두 시스템 모두 데비안 10을 실행합니다. 저는 이 가이드 를 따라 가며 원하는대로 수정했습니다. 스크립트의 관련 부분 :

/root/.local/bin/backup

#!/bin/bash

SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)

rsync -avzAHXh -e ssh root@[someIP]:/path/to/remote/dir /path/to/local/dir \
    || { echo "rsync died with error code $?"; exit 1; }

터미널에서 이것을 실행하면 모든 것이 잘 작동합니다. 그러나 cronjob을 통해 실행하면 :

crontab -u root -e

# m h  dom mon dow   command
  0 6  *    *    *   /root/.local/bin/backup >> /var/log/backup 2>&1

그런 다음 다음을 /var/log/backup보여줍니다.

root@[someIP]: Permission denied (publickey).^M
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
rsync died with error code 12

cronjob에서 무엇이 잘못되고 어떻게 처리 할 수 ​​있습니까?

추신 : 여기서 사용하는 gpg 키의 암호를 삭제하여이 작업을 수행했습니다. 이상적으로는 암호를 다시 추가해도 작동하는 솔루션을 원합니다.

X 티안

Cron에 의해 실행되는 명령은 매우 기본적인 실행 환경과 경로 설정을 가지고 있으며, 일반적인 사용자 ID로 명령이나 스크립트를 테스트하는 경우가 자주 발생합니다. 그런 다음 Cron에서 실행할 때 실패합니다.

내 보낸 환경 변수는 종종 간과됩니다. 배포 전에 최종 테스트로 하위 셸을 사용하여 완전히 축소 된 환경에서 루트로 최종 테스트를 수행하는 것이 현명합니다. 언제든지 로그 파일에 env를 인쇄하는 일회성 cronjob을 추가 할 수 있습니다. 이렇게하면 Cron이 호출 할 때 명령이 실행될 정확한 조건을 에뮬레이트 할 수 있습니다. 두 번째 장점은 오류가 발생하는 경우 터미널에 표시 될 수 있다는 것입니다.이 방법으로 디버깅하는 것이 더 쉽습니다.

스크립트에 할당 된 변수가 내보내지지 않은 것처럼 보이므로 SSH가이를 선택하지 않습니다.

스크립트에서 절대 파일 경로를 사용하는 것도 중요합니다. 디렉토리를 구체적으로 변경하지 않는 한 특정 디렉토리에 있다고 가정 할 수 없으며, 앞서 언급 한 일회성 테스트 스크립트에서 작업 디렉토리를 인쇄하는 것도 도움이됩니다. 이 점에서 모든 분포가 동일하다고 가정 할 수는 없습니다. 확인하는 것은 확실히 아프지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관