不同服务器之间使用svn钩子post-commit同步代码遇到的证书认证问题.md

遇到的问题,以下其他问题都是因解决这个问题引申出来的问题

VisualSVN hooks自动同步更新到web服务器

错误信息如下:

Error validating server certificate for 'https://host.example.com:443':  - The certificate is not issued by a trusted authority. Use the    fingerprint to validate the certificate manually!  - The certificate hostname does not match.  - The certificate has expired. Certificate information:  - Hostname: host.example.com  - Valid: from Jan 30 19:23:56 2004 GMT until Jan 30 19:23:56 2006 GMT  - Issuer: CA, example.com, Sometown, California, US  - Fingerprint: 7d:e1:a9:34:33:39:ba:6a:e9:a5:c4:22:98:7b:76:5c:92:a0:9c:7b  (R)eject, accept (t)emporarily or accept (p)ermanently?  ? svn: OPTIONS of 'https://server/svn/test': Server certificate verification failed: certificate issued for a different hostname, issuer is not trusted (https://server)  

  
#从本质上讲,这是个证书认证的问题,造成这个问题的原因是什么呢 ? 或许你已经按照上面说到的从服务器命令行下首先执行一下svn命令,选择p,缓存证书,为什么没解决呢?

分享下使用svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验

如果按照上面链接提供的方式去实现代码同步,有可能会遇到上面的error。 导致以上问题的原因是:在测试服务器运行svn相关命令缓存证书的用户和通过浏览器执行命令的用户不是一个用户!!特别注意。
比如,我在我的centos上运行svn命令用的root用户,但是我通过浏览器访问执行脚本用的却是www用户,就会产生上面的错误。
所以,解决问题的关键是,在服务器终端命令行运行svn up等命令缓存证书时,需要使用www用户,就是说要与浏览器运行脚本时使用的用户一致。

#查看浏览器访问时,php进程的执行用户可以通过下面的php脚本获取(需要通过浏览器访问的形式)。 
echo shell_exec("id -a");  
  • 首先要使www用户能够使用sudo命令。为什么呢?subversion一般是使用root用户安装,而且www作为一个web服务用户,权限受限,所以要使用sudo暂时获取root权限去执行相关命令。
    • 让www用户变为sudoner

linux 普通用户成为sudoer
添加用户到sudoer列表中
* 解决了sudo命令后,如果不是通过从本地终端执行shell,则会报一个错误sudo: sorry, you must have a tty to run sudo
解决sudo: sorry, you must have a tty to run sudo
This account is currently not available:这个账户目前不可用

  • 表达能力有限,至少在明白了是用户不同导致,再去探寻解决方法的时候就有了方向。下面这篇博文比我讲的好,可以去看看。

通过sudo解决php执行linux脚本的权限问题

posted @ 2015-01-15 20:05  Rice Lee  阅读(1403)  评论(0编辑  收藏  举报
hello footer