커밋 후 실행할 때 예상되는 scp 디렉터리가 작동하지 않습니다.

커밋 후 실행할 때 예상되는 scp 디렉터리가 작동하지 않습니다.

각 커밋 후에 svn 시스템의 일부 파일을 다른 백업 시스템으로 scp하는 커밋 후 후크를 svn에 구현하려고 합니다. 아래와 같이 Expect를 사용하여 스크립트를 작성했습니다.

spawn /usr/bin/scp -r $l_dir $r_usr@$r_host:/$r_dir

expect {
        timeout { send_user "Timeout"; exit 1 }

        eof { send_user "\nConnect failed for $r_host at \n"; exit 1 }

        -re ".*es..o.*" {
        send_user "sending yes\n"
        exp_send "yes\r"
        exp_continue
        }
        -re ".*sword.*" {
        send_user "sending password\n"
        exp_send "$r_pwd\r"
        }
}
interact

스크립트는 커밋 후(bash 스크립트)에서 호출되며 필요한 모든 변수를 제공합니다.

문제는 커밋 후 후크를 수행할 때입니다.

./post-commit

그러면 scp가 성공합니다. 그러나 실제 커밋에서 트리거되면 로그인하고 비밀번호를 제공하는 데 성공하지만 파일이 복사되지 않습니다.

디버그 출력이 포함된 스크립트 표시(커밋 트리거에서 실행되는 경우)

sending password
send: sending "vashishth\r" to { exp3 }
interact: received eof from spawn_id exp0

RSA 키를 사용하는 것은 불가능하므로 비밀번호와 함께 scp를 사용해야 합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

cron 등에서 기대치를 실행할 때 이러한 상황이 대화형에서는 작동하지 않는다는 것을 인터넷 검색을 통해 알아냈으므로 교체했습니다.

interact 

그리고

expect eof
exit

그리고 scp는 성공했습니다

관련 정보