之前提到过svn钩子脚本的简单应用 (svn的一些细节),当网站与svn在同一台服务器时,简单配置即可实现“svn提交代码,自动更新网站根目录”。
工作中碰到 “网站与svn在不同服务器” 的情况,存在两个障碍:
1、ssh远程命令无密码参数;
2、post-commit脚本执行账户为www,此账号无法通过写入公钥自动登陆。
我的解决方案是使用expect,代码如下
#!/usr/bin/expect -f set ip 10.10.1.105 set password mypasswd set timeout 30 spawn ssh svnagency@$ip expect { "*yes/no" { send "yes\r"; exp_continue} "*password:" { send "$password\r" } } expect "$*" send "svn up /var/www/pub/docs\r" send "exit\r" expect eof