abc
sudo 액세스가 제한된 사용자가 있는 빌드 시스템이 하나 있습니다 . 소스 코드를 확인하고 빌드 스크립트를 실행하면 제대로 작동합니다. 빌드 스크립트에는 sudo
"sudo: tty가 없고 Askpass 프로그램이 지정되지 않았습니다"라고 표시되지 않는 호출이 포함되어 있습니다. 그러나 슬레이브로 추가된 빌드 머신에서 Jenkins로 동일한 작업을 수행하면 "sudo: tty가 없고 Askpass 프로그램이 지정되지 않았습니다"라고 표시됩니다.
Default requiretty
파일에 주석을 달라는 한 가지 해결책을 찾았습니다 /etc/sudoers
. 하지만 저는 이 파일에 접근할 수 없습니다.
이 문제를 어떻게 극복할 수 있나요?
답변1
sudo
루트 비밀번호를 묻는 메시지를 표시하려고 하는데 가상 tty가 할당되지 않았기 때문에 실패합니다 .
루트로 로그인하거나 /etc/sudoers
(또는: sudo visudo
)에서 다음 규칙을 설정해야 합니다.
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
admin
그런 다음 Jenkins 사용자가 그룹(또는 ) 에 속해 있는지 확인하세요 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