jenkins執(zhí)行shell腳本掉蔬,使用scp免密傳輸失敗問題
問題:Jenkins默認(rèn)使用jenkins用戶去啟動廊宪,jenkins用戶并沒有權(quán)限去執(zhí)行ssh免密登陸,所以導(dǎo)致執(zhí)行失敗
注:配置linux雙機(jī)互信后女轿,jenkins也需要將公鑰加入到目標(biāo)機(jī)器箭启,才能達(dá)到shell腳本中scp免密傳輸?shù)臈l件
一、驗(yàn)證登錄
1蛉迹、切換jenkins用戶
# su jenkins
切換后還是root賬號
2傅寡、分析解決:
2.1 應(yīng)該是/etc/passwd文件中的/bin/bash被yum安裝的時候變成了/bin/false
# vim /etc/passwd
jenkins:x:990:988:Jenkins Automation Server:/var/lib/jenkins:/bin/false(bash)
將bin/false改為/bin/bash
再次執(zhí)行切換
# su jenkins
bash-4.1$
2.2? 結(jié)果命令提示符的用戶名不是jenkins而變成了 bash-4.1$,原因是在安裝jenkins時北救,jenkins只是創(chuàng)建了jenkins用戶荐操,并沒有為其創(chuàng)建home目錄
# vim ~/.bash_profile
在文件的最后添加?export PS1='[\u@\h \W]\$',執(zhí)行文件使修改項(xiàng)起作用
# source ~/.bash_profile
驗(yàn)證是否成功? ?# su jenkins
二珍策、為jenkins系統(tǒng)用戶開啟免密登錄
1托启、在Jenkins的使用過程中,如果在腳本中使用到sudo命令膛壹,有可能出現(xiàn)如下所示的錯誤:
sudo: no tty present and no askpass program specified
這是因?yàn)镴enkins服務(wù)器在執(zhí)行sudo命令時的上下文有誤驾中,導(dǎo)致這個命令執(zhí)行的異常唉堪。
2.1 解決方法:
# sudo visudo
在文件末尾加上jenkins ALL=(ALL) NOPASSWD: ALL
2.2 重啟jenkins模聋,測試
# su jenkins
# sudo su -s /bin/bash jenkins
測試成功,jenkins免密登錄成功唠亚。
PS:如果誤操作修改了/etc/sudoers的權(quán)限來修改上述文件链方,則會導(dǎo)致如下所示的錯誤:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
這是Linux的一種保護(hù)機(jī)制。因此灶搜,如果出現(xiàn)上述誤操作祟蚀,則需要執(zhí)行如下命令來解決:
$ pkexec chmod 0440 /etc/sudoers
三、jenkins用戶開通ssh免密登錄
1割卖、安裝ssh
# yum install ssh
1.1 將ssh服務(wù)設(shè)置開機(jī)自啟
# sudo systemctl enable sshd
1.2 啟動ssh
#?sudo systemctl start sshd
2前酿、生成jenkins用戶秘鑰證書
# su jenkins
# ssh-keygen -t rsa
2.1 查看是否生成成功
#?/var/lib/jenkins/.ssh/
# ls
3、將公鑰傳輸?shù)侥繕?biāo)linux系統(tǒng)
ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目標(biāo)ip:path
------------------------------------------------------------------------------------------
參考:https://blog.csdn.net/weixin_43840640/article/details/90371472