jenkins build - 尝试执行包含ssh命令的shell命令

时间:2016-06-09 20:01:16

标签: linux shell jenkins ssh

背景资料

我正在尝试让jenkins执行以下shell命令作为构建过程的一部分:

ssh root@10.111.11.11
rc-status

现在它失败了,出现以下错误消息:

Started by user anonymous
Building in workspace /var/lib/jenkins/jobs/Ansible Repo/workspace
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://git.core.myinternaldomain.net/cgit/ansible.git/ # timeout=10
Fetching upstream changes from http://git.core.myinternaldomain.net/cgit/ansible.git/
 > git --version # timeout=10
using .gitcredentials to set credentials
 > git config --local credential.username git # timeout=10
 > git config --local credential.helper store --file=/tmp/git805322146950822569.credentials # timeout=10
 > git -c core.askpass=true fetch --tags --progress http://git.myinternaldomain.net/cgit/ansible.git/ +refs/heads/*:refs/remotes/origin/*
 > git config --local --remove-section credential # timeout=10
 > git rev-parse refs/remotes/origin/dev^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/dev^{commit} # timeout=10
Checking out Revision 3cf34f240632e3296793c130f4589fbceb37f5bf (refs/remotes/origin/dev)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 3cf34f240632e3296793c130f4589fbceb37f5bf
 > git rev-list 3cf34f240632e3296793c130f4589fbceb37f5bf # timeout=10
[workspace] $ /bin/sh -xe /tmp/hudson50385520935510733.sh
+ ssh root@10.111.11.11
Pseudo-terminal will not be allocated because stdin is not a terminal.
Host key verification failed.
Build step 'Execute shell' marked build as failure
Finished: FAILURE

到目前为止我尝试过:

不幸的是,它似乎没有告诉我known_hosts文件中它不喜欢的行号。 在jenkins运行的同一台服务器上,我可以成功地进入远程服务器10.111.11.11,而不会出现命令提示符错误。

可能是因为它试图“匿名”而不是我的身份? 如果是这样,我该如何解决?我看不到任何允许我在jenkins中指定ssh用户的内容。

感谢。

1 个答案:

答案 0 :(得分:6)

主机密钥验证失败,而不是用户身份验证。您可以确保主机密钥存储在known_hosts文件中(通常是Jenkins运行用户的~/.ssh),例如

ssh-keyscan 10.111.11.11 >> ~/.ssh/known_hosts

如果您不关心安全性,可以禁用主机密钥验证:

ssh -o StrictHostKeyChecking=no root@10.111.11.11

其他提示

如果我做对了,你想在远程主机上运行命令rc-status。在这种情况下,您应该使用ssh远程命令执行,即直接将命令作为参数提供给ssh:

ssh root@10.111.11.11 rc-status

要设置公钥认证,我建议使用SSH agent plugin。如果您有任何进一步的问题,增加ssh详细级别总是有帮助的,例如ssh -vvv ...