sudo : tty가없고 askpass 프로그램이 지정되지 않았습니다.


73

sudo원격 상자에서를 사용하여 원격 바이너리를 실행하려고 할 때 :

ssh remotehost "sudo ./binary"

이 오류가 나타납니다.

sudo : tty가없고 askpass 프로그램이 지정되지 않았습니다.

이 문제를 어떻게 해결할 수 있습니까?

EDIT 이 가장 확실히 같은 제안 질문의 중복이 아니다. 거기에 대한 답변은 전혀 관련이 없습니다. 실제로 sudoers 파일에 대한 변경 사항은 이미 원격 호스트에 적용되었습니다.


답변:


78

간단한 방법은 다음을 지정하는 것입니다 -t.

ssh -t remotehost "sudo ./binary"

매뉴얼 페이지에서 :

의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제합니다.

이것이 왜 효과가 있는지 정확하게 설명 할 수 없으며 더 좋은 방법이있을 수 있습니다. 나는 그렇다면 그것에 대해 듣고 싶습니다 :)

@psusi는 이것이 왜 아래 주석에서 작동하는지 설명합니다.


14
sudotty가 암호를 묻는 프롬프트를 요구 하기 때문에 작동 하며, 실행할 명령을 지정할 때 ssh일반적으로 바이너리 데이터를 전송할 수있는 비 대화 형 명령을 실행하는 데 사용되므로 기본적으로 하나를 할당하지 않으므로 tty를 트립 할 수 있습니다 .
psusi

@psusi이 관련 질문에 대한 답을 알고 있습니까? unix.stackexchange.com/questions/110841
trusktr

도 있습니다 -tt히어 닥을 사용하여 명령을 전달할 때 필요
루퍼스

26

질문:

이 문제를 어떻게 해결할 수 있습니까?

sudo: no tty present and no askpass program specified

다른 답변

대안으로 다음을 시도하십시오.

sudo -S ./binary

이것은 sudo가 표준 입력 stdin에서 암호를 읽도록 지시합니다.

이것이 도움이되는 시나리오

chroot 환경에서 이러한 다른 답변은 올바르게 작동하지 않을 수 있습니다.

  1. / etc / shadow와 / etc / passwd의 충돌로 인해 사용자가 암호를 입력 할 수 없습니다.
  2. chroot 환경에서는 tty1에 대한 액세스가 약간 어려울 수 있으며 ctrl-alt f2-tty2는 chroot가 아닌 환경의 tty이므로 실행할 수 없습니다.

예를 들어 : chroot 환경 (예 : Archlinux 및 arch-chroot)을 사용하여 Linux 또는 부트 로더를 수동으로 설치 / 수리합니다.


sudo-./binary를 실행할 때 sudo : ./binary : command not found 오류가 발생합니다.
Ajit Goel

5

비밀번호를 읽을 터미널 / 응용 프로그램을 정의해야합니다. 두 가지 변형이 있습니다.

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (기본적으로 보이는 비밀번호)

11
편집 과정에서 오류가 발생하여 잠재적으로 컴퓨터를 잠그지 않도록 visudo대신 사용 하는 것이 좋지 vim /etc/sudoers않습니까?
Drew Noakes

2

sudo루트 암호를 묻는 메시지가 표시되고 의사 tty가 할당되지 않아 실패합니다 .

루트로 로그인하거나 /etc/sudoers (또는 :)에 다음 규칙을 설정해야합니다 sudo visudo.

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

그런 다음 사용자가 admin그룹 (또는 wheel)에 속하는지 확인하십시오 .


이것이 사실이 아니지만 (이에 대한 증거는 없으며 centos 및 우분투 시스템에서 해당 코드를 가진 관리자 그룹의 사용자는 여전히 오류가 발생합니다.) 에스컬레이션 된 작업
MrMesees

2

/etc/sudoers.d에 "sudo_shutdown"과 같은 파일을 컨텐츠로 만들 수도 있습니다.

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

이를 통해 adm 그룹에있는 사용자는 비밀번호없이 종료 할 수 있습니다.


3
"tty tty present"를 다루기 위해 이것을 편집
Geek

2

내 경우에는 sudoers에서 루트로 사용하려는 명령을 지정하지 않았기 때문에이 오류가 발생했습니다.

같은 것

/etc/sudoers.d/myuser:

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

나를 위해 일했다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.