Host key verification failed:解决jenkins执行shell脚本,使用scp免密传输文件失败的问题

环境还原

在这里插入图片描述
使用scp想另一台linux系统的服务器免密传输文件时,报错:Host key verification failed,前题是我已经将两台服务器进行了ssh免密登陆的设置
在这里插入图片描述

分析问题

猜想是不是因为Jenkins默认使用jenkins用户去启动,然而jenkins用户没有权限去执行ssh免密登陆,之前写过一篇关于jenkins用户的文章,感兴趣的朋友可以去翻看(https://blog.csdn.net/weixin_43840640/article/details/88747144(重点在文档末尾))。

验证过程

1.切换jenkins系统用户

[root@cicd ~]# su jenkins
[root@cicd ~]#

可以看到切换失败,依然是root账号。

现在,我们来解决无法切换jenkins用户的问题,猜测是/etc/passwd文件中的/bin/bash被yum安装的时候变成了/bin/false

#验证猜想
[root@cicd ~]# vim /etc/passwd

在这里插入图片描述
改为:
在这里插入图片描述
执行:

[root@cicd ~]# su jenkins
bash-4.1$

结果命令提示符的用户名不是jenkins而变成了 bash-4.1$,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录。

解决方法:

[root@cicd ~]# vim ~/.bash_profile

执行上面的命令,即使没有.bash_profile文件,linux会自动创建,然后在文件的最后添加 export PS1='[\u@\h \W]\$'
在这里插入图片描述
执行以下命令,使修改项起作用

[root@cicd ~]#source ~/.bash_profile

验证是否成功:
在这里插入图片描述
2.为jenkins系统用户开通免密登陆

在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误:

sudo: no tty present and no askpass program specified

这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。

解决方法:
在jenkins服务器上执行以下命令:

[root@cicd ~]#sudo visudo

在文件末尾加上一行jenkins ALL=(ALL) NOPASSWD: ALL
在这里插入图片描述
重启Jenkins服务

[root@cicd ~]#systemctl status jenkins
[root@cicd ~]#systemctl stop jenkins
[root@cicd ~]#systemctl start jenkins

测试一下是不是还要密码:
在这里插入图片描述
测试成功,jenkins免密登录成功。

PS:如果误操作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误:

sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin

这是Linux的一种保护机制。因此,如果出现上述误操作,则需要执行如下命令来解决:
$ pkexec chmod 0440 /etc/sudoers

Jenkins用户开通ssh免密登陆

1.安装ssh

[root@cicd ~]#yum install ssh

将SSH服务设置成开机自启动

[root@cicd ~]# sudo systemctl enable sshd

启动SSH服务

[root@cicd ~]# sudo systemctl start sshd

2.生成jenkins用户的密钥对

 [root@cicd ~]# su jenkins
 [root@cicd ~]# ssh-keygen -t rsa

在这里插入图片描述
检查密钥对是否生成成功:
在这里插入图片描述
3.将公钥传输到目标linux系统
ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目标ip地址:路径
在这里插入图片描述
至此,在a机器上面使用jenkins账户免密ssh登录到b机器已经部署成功,scp大体如此。

测试

步骤一:打开jenkins的系统管理-系统设置,配置Publish over SSH
在这里插入图片描述
点击“Test Configuration”,如果成功进行步骤三,否则,进行步骤二
在这里插入图片描述
步骤二:
点击“Test Configuration”,报错,连接被拒绝,如图所示:
在这里插入图片描述
分析原因:应该是linux系统的端口号配置错误,因为linux系统的默认端口是22,但是也可以自定义端口号
解决办法:点击“Advanced…”,修改端口号
在这里插入图片描述
点击“Test Configuration”,报错,SSH认证失败,如图所示:
在这里插入图片描述
解决方法:使用Publish over SSH插件的Use password authentication, or use a different key:可以替换公共配置属性,就是为每一台机器都配置不同的ssh密钥。

[root@cicd ~]#su jenkins
[jenkins@cicd root]$cd /var/lib/jenkins/.ssh
[jenkins@cicd .ssh]$ls
id_rsa	id_rsa.pub  known_hosts
[jenkins@cicd .ssh]$cat id_rsa

在这里插入图片描述
其中“Passphrase/Password”,勾选“Use password authentication, or use a different key”之后,会自动生成,如果没有生成也没有关系,只需将id_rsa的内容填写到“Key”即可。
点击下方的 Test Configuration按钮,测试,显示Success。
步骤三:构建jenkins上的项目
在这里插入图片描述
查看目标服务器是否接收到该文件:
在这里插入图片描述
自动化部署中的jenkins调用自己账户,免密码上传文件已经解决。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值