jenkins執(zhí)行shell腳本,使用scp免密傳輸失敗問題
問題:Jenkins默認(rèn)使用jenkins用戶去啟動,jenkins用戶并沒有權(quán)限去執(zhí)行ssh免密登陸,所以導(dǎo)致執(zhí)行失敗
注:配置linux雙機互信后,jenkins也需要將公鑰加入到目標(biāo)機器,才能達(dá)到shell腳本中scp免密傳輸?shù)臈l件
一、驗證登錄
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í)行文件使修改項起作用
# source ~/.bash_profile
驗證是否成功? ?# su jenkins
二、為jenkins系統(tǒng)用戶開啟免密登錄
1、在Jenkins的使用過程中,如果在腳本中使用到sudo命令,有可能出現(xiàn)如下所示的錯誤:
sudo: no tty present and no askpass program specified
這是因為Jenkins服務(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ù)機制。因此,如果出現(xiàn)上述誤操作,則需要執(zhí)行如下命令來解決:
$ pkexec chmod 0440 /etc/sudoers
三、jenkins用戶開通ssh免密登錄
1、安裝ssh
# yum install ssh
1.1 將ssh服務(wù)設(shè)置開機自啟
# 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