Scp

從送出後執行時,期望 scp 目錄不起作用

  • December 24, 2015

我正在嘗試在 svn 上實現一個送出後掛鉤,它將在每次送出後將一些文件從 svn 機器 scp 到其他一些備份機器。我用期望編寫了腳本如下

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。任何幫助將不勝感激。

發現一些Google這樣的情況下執行從 cron 等的期望不能與互動一起工作所以我替換了

interact 

expect eof
exit

並且 scp 是成功的

引用自:https://unix.stackexchange.com/questions/251281