abc
sudo 액세스가 제한된 사용자가 있는 빌드 시스템이 있습니다 . 소스 코드를 확인하고 빌드 스크립트를 실행하면 정상적으로 작동합니다. 빌드 스크립트에 sudo
지정되지 않은 호출 "sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다"가 포함되어 있습니다. 그러나 슬레이브로 추가된 빌드 머신에서 Jenkins로 동일한 작업을 수행하면 "sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다"라는 메시지가 나타납니다.
Default requiretty
파일에서 주석 처리하라는 솔루션을 찾았습니다 /etc/sudoers
. 하지만 파일에 접근할 수 없습니다.
이 문제를 어떻게 극복할 수 있습니까?
답변1
sudo
루트 비밀번호를 묻는 메시지를 표시하려고 시도했지만 의사 tty가 할당되지 않았기 때문에 실패했습니다 .
/etc/sudoers
루트로 로그인하거나 (or:)에서 다음 규칙을 설정해야 합니다 sudo visudo
.
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
그런 다음 Jenkins 사용자가 admin
그룹(또는 wheel
)에 속해 있는지 확인하세요.
이상적으로(더 안전하게) 루트 권한을 다음과 같이 지정할 수 있는 특정 명령으로 제한합니다.%admin ALL=(ALL) NOPASSWD:/path/to/program
답변2
두 가지 옵션이 있습니다. 언급한 대로 Defaults requiretty
/etc/sudoers의 설정을 주석 처리하거나 pseudo-tty 할당( -t
) 매개변수를 사용하는 것입니다 ssh
.
Jenkins 스크립트에서 다음을 시도해 보세요.
ssh -t 127.0.0.1 "sudo command"
알려진 호스트에 항목을 추가 하려면 ssh
사전 공유 키를 직접 구성하고 수동으로 한 번 실행해야 하지만 매개변수를 추가하여 이를 무시할 수도 -o StrictHostKeyChecking=no
있습니다 ssh
.