解決Jenkins執行shell指令碼時出現“sudo: no tty present and no askpass program specified”的錯誤
阿新 • • 發佈:2019-01-27
今天使用jenkins job執行呼叫指令碼執行CD task時,出現了“sudo: no tty present and no askpass program specified”的問題,網上找了很多,但大多都沒有解決我的問題。
問題描述:
寫好shell指令碼後,直接在宿主機直接使用"sudo ./product_env.sh"時,指令碼可以正常執行,但是在jenkins伺服器上,遠端呼叫此機器上的指令碼時,會丟擲:“sudo: no tty present and no askpass program specified”
解決:
修改sudo配置檔案,直接輸入命令“visudo”或“sudo visudo”:
## Drivers # Cmnd_Alias DRIVERS = /sbin/modprobe # Defaults specification # # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # #Defaults requiretty # # Refuse to run if unable to disable echo on the tty. This setting should also be # changed in order to be able to use sudo without a tty. See requiretty above. # Defaults !visiblepw
找到“Defaults !visiblepw”,直接將當中的“!”去掉(如果是被註釋的,就把“#”去掉),如果沒有就增加行:Defaults visiblepw
否則就會出現:sudo: no tty present and no askpass program specified 錯誤
此外,我們也可以將Defaults requiretty註釋或修改為 #Defaults requiretty, 表示不需要控制終端。
我們也可以賦予當前登入使用者(如:user1)執行某項服務的許可權,如:
如,增加行:user1 ALL=(ALL) NOPASSWD: /etc/nginx/sbin
注:NOPASSWD可以使在命令執行時不需要互動輸入user1使用者的密碼, 修改後重啟服務生效