서비스로 실행 시 SSH 연결(공개키, 비밀번호)에 대한 권한이 거부되었습니다.

서비스로 실행 시 SSH 연결(공개키, 비밀번호)에 대한 권한이 거부되었습니다.

/home/localuser/backup-script.sh다음 코드 조각이 포함된 bash 스크립트가 있습니다 .

rsync -avzh \
  -e "ssh -i /home/localuser/.ssh/id_ed25519" \
  /home/localuser/backups/file-to-backup.gz \
  [email protected]:/home/remoteuser/backups

쉘에서 직접 실행하면 모든 것이 매력처럼 작동하지만 구성한 systemd 서비스를 통해 실행하면 오류가 발생합니다.[email protected]: Permission denied (publickey,password).

이것은 내가 구성한 서비스입니다( /etc/systemd/system/backup.service).

[Unit]
Description=Trigger script to perform backup

[Service]
Type=oneshot
User=localuser
ExecStart=/bin/bash /home/localuser/backup-script.sh

[Install]
WantedBy=multi-user.target

저는 보통 타이머를 통해 실행하지만, 타이머를 통해 직접 시작하면sudo systemctl start backup.service

스크립트를 직접 실행하거나 .ssh [email protected]

무슨 일이 일어나고 있는지 전혀 모르겠어요... 단서가 있나요?

rsync추가 정보: 교체 시 동일한 오류가 발생합니다.scp


편집하다:

Stewart의 의견에 따라 이 명령을 실행하여 스크립트를 직접 실행하려고 시도했는데 env -i /bin/bash --norc --noprofile backup-script.sh, 이 경우 SSH 키 비밀번호를 묻는 메시지가 표시되었으므로 문제는 Stewart의 의견에 나와 있는 것과 정확히 같습니다.

간단한 해결책으로 문제를 해결하기 위해(따라서 ssh-agent서비스로 추가, 자동 키 로딩 및 시작 시 자동 비밀번호 입력 방지) rsync스크립트의 명령을 변경하고 두 번째 줄( -e ...)을 다음 줄로 바꿨습니다 --rsh="/usr/bin/sshpass -p remoteuser_pwd ssh -o StrictHostKeyChecking=no -l remoteuser".

결과는 비슷합니다. 직접 실행하면 제대로 작동합니다. 서비스를 통해 시작하면 작동하지 않습니다. 하지만 이번에는 오류가 없고 그냥 멈춥니다. 시작하면 env -i /bin/bash --norc --noprofile backup-script.sh같은 방식으로 중단됩니다.

이런 식 으로 backup.service추가하여 변경해도 문제가 해결되지 않습니다.--loginExecStart=/bin/bash --login /home/localuser/backup-script.sh

답변1

특정 문제에 대한 답변은 없지만 ssh 명령에 자세한 출력을 추가하여 ssh 키 사용과 관련된 추가 정보를 디버깅할 수 있습니다.

rsync -avzh \
  -e "ssh -vvv -i /home/localuser/.ssh/id_ed25519" \
  /home/localuser/backups/file-to-backup.gz \
  [email protected]:/home/remoteuser/backups

-vvvssh는 연결, ssh 구성 및 ssh 키와 관련된 일련의 출력을 stdout으로 인쇄 하게 됩니다 . 실행 중인 대화형 실행의 출력을 파일로 파이프한 다음 서비스(실행되지 않음)의 출력을 파일로 파이프합니다. 두 파일을 모두 읽으려면 diff 유틸리티를 사용하십시오. vim에 익숙하다면 vimdiff를 추천합니다. 이를 통해 적어도 무엇이 다르고 무엇이 잘못되었는지에 대한 아이디어를 얻을 수 있습니다.

편집: 이제 rsync의 기본값은 ssh이고 ~/.ssh/config에 원격 호스트에 대한 항목을 추가할 수 있다고 생각합니다. 그러면 원하는 다른 호스트별 옵션과 함께 제공된 ID/키를 사용하도록 SSH 세션(rsync 포함)을 구성해야 합니다.

관련 정보