makefile을 사용하여 일부 소스를 컴파일하려고합니다. makefile에는로 실행해야하는 명령이 많이 있습니다 sudo
.
터미널에서 소스를 컴파일하면 모든 것이 잘되고 sudo
명령을 처음으로 암호를 기다리는 동안 make가 일시 중지 됩니다. 암호를 입력하면 make가 다시 시작되고 완료됩니다.
그러나 NetBeans에서 소스를 컴파일 할 수 있기를 바랍니다. 그래서 프로젝트를 시작하고 소스를 찾을 수있는 위치에 netbeans를 보여 주었지만 프로젝트를 컴파일하면 오류가 발생합니다.
sudo: no tty present and no askpass program specified
처음으로 sudo
명령을 내 렸습니다 .
인터넷에서 문제를 찾았으며 찾은 모든 솔루션 중 하나는이 사용자의 암호를 사용하지 않도록 설정하는 것입니다. 문제의 사용자가 루트이기 때문에. 나는 그것을하고 싶지 않습니다.
다른 해결책이 있습니까?
답변
사용자에게 암호를 묻지 않고 해당 명령을 사용하도록 허용하면 문제가 해결됩니다. 먼저 쉘 콘솔을 열고 다음을 입력하십시오.
sudo visudo
그런 다음 해당 파일을 편집하여 맨 끝에 추가하십시오.
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
예 :
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
사용자 수 john
sudo를 poweroff
, start
및 stop
암호를 입력하라는 메시지가 표시되지 않고.
화면 하단에서 visudo에 사용해야하는 키 입력이 있는지 확인하십시오.이 방법은 vi가 아니므로 문제의 첫 징후가 없으면 저장하지 않고 종료하십시오. 건강 경고 :이 파일을 손상 시키면 심각한 결과를 초래할 수 있으므로주의해서 편집하십시오!
답변
시험:
-
NOPASSWD
모든 명령에 줄을 사용하십시오 .jenkins ALL=(ALL) NOPASSWD: ALL
-
sudoers
파일의 다른 모든 줄 뒤에 줄을 넣으십시오 .
그것은 나를 위해 일했습니다 (우분투 14.04).
답변
시험:
ssh -t remotehost "sudo <cmd>"
위의 오류가 제거됩니다.
답변
모든 대안을 찾은 후 다음을 발견했습니다.
sudo -S <cmd>
-S (stdin) 옵션은 sudo가 터미널 장치 대신 표준 입력에서 암호를 읽도록합니다.
위의 명령은 여전히 암호를 입력해야합니다. jenkins와 같은 경우 암호 입력을 수동으로 제거하려면이 명령이 작동합니다.
echo <password> | sudo -S <cmd>
답변
sudo
기본적으로 연결된 터미널에서 비밀번호를 읽습니다. 문제는 netbeans 콘솔에서 실행될 때 연결된 터미널이 없다는 것입니다. 따라서 다른 방법으로 암호를 입력해야합니다.이를 askpass 프로그램 이라고합니다 .
askpass의 프로그램은 특정 프로그램,하지만 암호를 요청할 수있는 프로그램이 아닙니다. 예를 들어 내 시스템에서 x11-ssh-askpass
제대로 작동합니다.
그러기 위해서는 환경 변수 SUDO_ASKPASS
나 sudo.conf
파일 에서 사용할 프로그램을 지정해야 합니다 ( man sudo
자세한 내용 참조).
sudo
옵션을 사용하여 askpass 프로그램을 강제 로 사용할 수 있습니다 -A
. 기본적으로 접속 된 터미널이없는 경우에만 사용합니다.
답변
우분투 16.04 사용자
읽어야 할 파일이 있습니다.
cat /etc/sudoers.d/README
/etc/sudoers.d/myuser에 0440 모드의 파일을 다음 내용으로 배치합니다.
myuser ALL=(ALL) NOPASSWD: ALL
문제를 해결해야합니다.
다음을 잊지 마십시오 :
chmod 0440 /etc/sudoers.d/myuser
답변
이거 한번 해봐:
echo '' | sudo -S my_command
