[linux] ‘sudo : tty가없고 askpass 프로그램이 지정되지 않았습니다’오류를 수정하는 방법?

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

사용자 수 johnsudo를 poweroff, startstop암호를 입력하라는 메시지가 표시되지 않고.

화면 하단에서 visudo에 사용해야하는 키 입력이 있는지 확인하십시오.이 방법은 vi가 아니므로 문제의 첫 징후가 없으면 저장하지 않고 종료하십시오. 건강 경고 :이 파일을 손상 시키면 심각한 결과를 초래할 수 있으므로주의해서 편집하십시오!


답변

시험:

  1. NOPASSWD모든 명령에 줄을 사용하십시오 .

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. 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_ASKPASSsudo.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