우리는 이를 사용하여 unison
두 서버를 동기화하려고 합니다. 명령줄과 bash 파일에서 다음 명령이 제대로 작동합니다.
unison -batch /var/www/html/test ssh://host-2//var/www/html/test
파일이 동기화 및 unison.log
업데이트 중입니다. 여태까지는 그런대로 잘됐다.
예를 들어 기본 설정 파일과 함께 사용되며 .unison/default.prf
설명된 대로 명령줄에서 간단히 실행됩니다.unison
여기, 모든 것이 잘 작동합니다.
또한 incrond
inotify cron 데몬을 설치했는데 원활하게 실행되었습니다. 다음 크론 작업은 정상적으로 실행됩니다.
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE touch /root/test
/root/test
파일을 변경할 때마다 업데이트됩니다./var/www/html/test
여태까지는 그런대로 잘됐다! 그러나 incrontab을 사용하여 작동하지 않는 유일한 것은 다음과 같습니다.
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison -batch /var/www/html/test ssh://host-2//var/www/html/test
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test'
unison.log
원격 서버 업데이트는 물론이고 파일에 아무것도 표시되지 않습니다 . 다음도 아무것도 출력하지 않습니다.
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison &> /root/test.log
/root/test.log
아직 생성되지도 않았습니다.
" also "라는 배치 파일을 사용한 또 다른 테스트가 sync.sh
작동하지 않았습니다.
인크론탭에서:
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /root/sync.sh
그리고 sync.sh
:
#!/bin/bash
touch /root/test
/usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test
다시 한번 /root/test
말하지만, inofify는 파일을 업데이트할 때마다 잘 작동 /var/www/html/test
하지만 다시는 아무 결과도 나오지 않는다는 의미입니다 unison
.
/var/log/cron은 다음과 같습니다:
May 21 06:33:44 Host-1 incrond[28339]: (root) CMD (sh /root/sync.sh)
그리고 unison.log
업데이트가 전혀 없습니다.
결론적으로:
inotify
잘 작동하고 파일 시스템의 모든 변경 사항을 감지하고 작업을 실행합니다(unison
모든 작업 제외).unison
데몬 에 의해incrond
호출되지 않는 한 명령줄 및 배치에서 잘 작동합니다 .
내가 뭔가를 간과했나요?
답변1
SSH 연결을 설정하려면 클라이언트가 서버에 인증해야 합니다. 키가 비밀번호로 보호된 파일에 저장되고 SSH 에이전트에 로드되는 키 기반 인증을 사용 중일 수 있습니다. SSH 클라이언트는 환경 변수를 통해 프록시를 찾는 방법을 알고 있습니다 SSH_AUTH_SOCK
. cron 또는 incron 작업에서는 환경이 대화형 세션의 환경과 다르며 매우 작은 환경이고 SSH 클라이언트가 없으므로 SSH_AUTH_SOCK
SSH 클라이언트가 원격 시스템에 연결할 수 없습니다.
SSH 연결을 설정할 수 없는 경우 Unison은 동기화할 파일을 찾기도 시작하지 않으며 unison.log
.
스크립트의 표준 오류에 오류 메시지가 있지만 어디에도 기록하지 않았습니다. exec 2>&1 >>~/.unison-sync.log; date
스크립트 시작 부분에 이와 같은 내용을 추가하십시오.
SSH 연결이 제대로 작동하려면 Unison 작업을 예약하여 에이전트에 액세스하거나 비밀번호 없는 키를 설정해야 합니다. 프록시를 통해 진행하려면 다음을 참조하세요.Crontab에서 쉘 스크립트를 사용하여 원격 컴퓨터에 SSH를 통해 연결할 수 없습니다.;그러나 로그인한 경우에만 작동합니다. 동기화가 항상 작동하도록 하려면 비밀번호 없는 키가 유일한 솔루션입니다. Unison 및 SSH를 루트로 실행하고 있으므로 개인 키는 /root/.ssh
계정이 아닌 에 있어야 합니다 . 의 모든 관련 옵션에도 동일하게 적용됩니다 .ssh/config
. 서버 측에서는 command=…
지시문을 사용하여 일관된 특정 명령 만 실행하도록 공개 키에 권한을 부여할 수 있습니다 .ssh/authorized_keys
(참조:하나의 명령만 실행하는 UNIX 계정 만들기예를 들어). 명령 제한으로 인해 누군가 로컬 루트 계정에 대한 액세스 권한을 얻은 경우 unison …
해당 특정 명령을 에서만 실행할 수 있습니다 host-2
. Unison이 이런 식으로 임의의 코드를 실행하도록 속일 수 있는지는 모르겠습니다.