jenkins运行phing exectask。 Exectask使用ssh代理转发。 没有权限。 如何解决?

什么地方出了错

我有一个Ubuntu 12.10服务器。

我在同一台服务器上安装了Jenkins和Nginx。

Nginx应该为服务器文件提供的/ var / virtual具有www-data的权限设置:www-data

用户jenkins正在运行Jenkins软件。

在这里输入图像说明

这是我在phing build.xml中编写的目标

 <target name="gitclone"> <echo msg="gitclone ${environment.branch} branch code to ${environment} environment" /> <exec command="ssh -A ${host-used} 'git clone -b ${repository-uri} ${environment.branch} ${environment.sitedir}${build.time}'" outputProperty="result" escape="false"/> <echo msg="${result}" /> <echo msg="update all the submodules after gitclone" /> <exec dir="${environment.sitedir}${build.time}" command="ssh -A ${host-used} 'git submodule update --init --recursive'" outputProperty="result" escape="false" /> <echo msg="${result}" /> </target> 

这是我的控制台从jenkins输出:

 [echo] gitclone master branch code to production environment [echo] Permission denied, please try again. Permission denied, please try again. Permission denied (publickey,password). [echo] update all the submodules after gitclone Execution of target "gitclone" failed for the following reason: /var/lib/jenkins/jobs/abc-master/workspace/build.xml:116:48: '/var/virtual/abc.com/2013_01_11_07_45_35' is not a valid directory 

我试过了

我google了一下,然后我看到这个关于ssh代理转发的github文章 。

这是我的尝试。

我作为jenkinsssh到我的服务器。

然后我input

 ssh -T www-data@xxx.xx.xxx.xx 

我被提示inputwww-data@xxx.xx.xxx.xx密码。 请注意,xxx.xx.xxx.xx从现在开始是指同一个服务器的IP地址。

我成功地以www数据login,所以我退出了www-data@xxx.xx.xxx.xx。 现在回到服务器作为jenkins用户。

现在我试试

 echo "$SSH_AUTH_SOCK" 

我什么也没得到

我进入/var/lib/jenkins/.ssh/config并键入以下内容:

 Host xxx.xx.xxx.xx ForwardAgent yes IdentityFile /var/lib/jenkins/.ssh/id_rsa StrictHostkeyChecking no 

build立Jenkins再次工作。 失败。

然后我想也许我需要在www-data〜/ .ssh / authorized_keys文件中设置authorized_keys,这样当我们从jenkins@xxx.xx.xxx.xx到www-data@xxx.xx.xxx.xx时,不会提示input密码。

所以jenkins ,我打字

 cat ~/.ssh/id_rsa.pub | ssh www-data@xxx.xx.xxx.xx 'cat >> .ssh/authorized_keys' 

然后我input

 ssh -T www-data@xxx.xx.xxx.xx 

我被提示inputwww-data@xxx.xx.xxx.xx这个密码。

我成功以www数据login, 而这次没有提示input密码 ,所以我退出了www-data@xxx.xx.xxx.xx。 现在回到服务器作为jenkins用户。

build立Jenkins再次工作。 失败。

正如jenkins ,我input

 echo "$SSH_AUTH_SOCK" 

什么都看不到

试着

 ssh-add -L 

得到

 Could not open a connection to your authentication agent. 

编辑/etc/ssh/sshd_config并添加

 AllowAgentForwarding yes 

检查/etc/ssh/ssh_config 。 没有ForwardAgent no设置。

build立Jenkins再次工作。 失败。

对于我注意到你的git clone命令可能写错了。

检查:

  <exec command="ssh -A ${host-used} 'git clone -b ${environment.branch} ${repository-uri} ${environment.sitedir}${build.time}'" 

我交换了${environment.branch}${repository-uri}

参考: git-clone(1)手册页

我建议你使用ant-jsch

我已经在jenkins下面使用了ant-jsch。

ant-jsch能够控制ssh识别等等