Started by user 123
Running as SYSTEM
[EnvInject] - Loading node environment variables.
Building in workspace /var/lib/jenkins/workspace/test-a
[test-a] $ /bin/sh -xe /tmp/jenkins2994750458785375652.sh
+ IP=10.0.0.52
+ scp /data/a.sh root@10.0.0.52:/data/
Host key verification failed.
lost connection
Build step 'Execute shell' marked build as failure
Finished: FAILURE

报错原因

a.jenkins普通用户无法执行某些系统命令;

b.我们并没有为jenkins生成过密钥对,也没有将他的公钥拷到目标服务器上.

  在安装jenkins后,系统生成了jenkins这个普通用户,但是在/etc/passwd中,他的shell是/bin/false,所以他不能登录系统,也没有家目录;

  首先我们修改他的登录权限,将/bin/false改为/bin/bash,切换到jenkins用户,su - jenkins,他的终端显示为-bash-4.2$,修改终端显示.

终端修改完之后长这个样子

生成密钥对

具体步骤

1

2

3

4

5

6

7

8

vim ~/.bash_profile

export PS1='[\u@\h \W]\$'

source ~/.bash_profile

# 给jenkins生成密钥对

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.41

# 验证

ssh 'root@10.0.0.41'

3.使用sudo提升普通用户权限

  此时是完成了第二步,但还没有操作第一步,在文件末尾添加一行,就这么一行就有很多要注意的地方,首先修改文件权限为600,然后用viduso去修改文件,中间的空隙不是空格,而是tab,命令和命令之间要用逗号,保存退出后,将权限改为440,而不是400,最后用visudo -c检查语法是否出错.

jenkins        ALL=(ALL)    NOPASSWD: /usr/bin/ssh, /usr/bin/rsync

jenkins        ALL=(ALL)    NOPASSWD: ALL

这两行内容任意选一个都行.

重启服务,构建任务

一直有人提问说总是不成功,这里再补充一点,在jenkins里面-系统设置-系统信息里面有个user.name可以看下当前jenkins使用的用户是什么,很多朋友以为默认就是jenkins用户,其实使用的root用户所以ssh-copy-id 总是不成功。这里一定要确定好jenkins使用的用户是什么!!!

配置好别忘了先用之前配置的命令登录一下,否则也是一样提示,如下图:

输入yes后确定命令行是可以登录的,再试jenkins里面各类脚本就可以通过了。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐