從 Jenkins 呼叫 sudo

從 Jenkins 呼叫 sudo

我有一台建置機器,其中的使用者的abcsudo 存取權限有限。當我檢查原始程式碼並運行建置腳本時,它工作正常。建置腳本包含sudo未指定「sudo:不存在 tty 且未指定 Askpass 程式」的呼叫。但是,當我在新增為從機的建置機器上對 Jenkins 執行相同的操作時,它顯示「sudo:不存在 tty,並且未指定 Askpass 程式」。

Default requiretty我找到了一種解決方案,說要在文件中註解掉/etc/sudoers。但我無權存取該文件。

我怎樣才能克服這個問題?

答案1

它失敗了,因為sudo正在嘗試提示 root 密碼並且沒有分配偽 tty。

/etc/sudoers 您必須以 root 身分登入或在您的(或:)中設定以下規則sudo visudo

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

然後確保您的 Jenkins 使用者屬於admin群組(或wheel)。

理想情況下(更安全),它將 root 權限僅限於可以指定為的特定命令%admin ALL=(ALL) NOPASSWD:/path/to/program

答案2

有兩個選項,如您提到的那樣註解掉Defaults requiretty/etc/sudoers 中的設置,或使用偽 tty 分配 ( -t) 參數ssh

在您的詹金斯腳本中嘗試以下操作:

ssh -t 127.0.0.1 "sudo command"

儘管您必須ssh為自己配置預共用金鑰並手動執行一次以向已知主機新增條目,但也可以新增參數-o StrictHostKeyChecking=nossh忽略這一點。

答案3

簡單的方法來做到這一點
在此輸入影像描述

$ sudo visudo
## Now add the below lines in your sudoers file :
jenkins ALL=(ALL) NOPASSWD: ALL

$service jenkins start

答案4

如果您透過 ssh 執行命令,則需要選取「Exec in pty」選項。 在此輸入影像描述

相關內容