我有一台建置機器,其中的使用者的abc
sudo 存取權限有限。當我檢查原始程式碼並運行建置腳本時,它工作正常。建置腳本包含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=no
來ssh
忽略這一點。