본문 바로가기
Linux

[Linux] sudo: sorry, you must have a tty to run sudo 메시지 발생 시 해결하는 방법

by hiit 2022. 9. 16.
728x90
반응형

1. 증상

ssh 연결을 통해 암호 없이 원격 명령을 실행하기 위해 /etc/sudoers 파일을 수정 후 sudo 사용 시 다음과 같은 메시지 확인
sudo: sorry, you must have a tty to run sudo.

2. sudo 와 tty 는 무엇인가?
sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다.
명칭은 본래 슈퍼유저로서의 실행에 사용되던 것에서 “superuser do”에서 유래하였으나, 후에 프로그램의 기능이 확장되며 “substitute user do”(다른 사용자의 권한으로 실행)의 줄임말로 해석되게 되었다.
tty는 컴퓨팅에서 표준 입력에 연결된 터미널의 이름을 출력하는 유닉스, 유닉스 계열 운영 체제의 명령어이다. tty는 TeleTYpewriter를 대표한다.

3. sudo: sorry, you must have a tty to run sudo. 메시지는 무엇인가?
sudo 명령이 tty가 필요한 명령을 실행하려고 할 때 'sudo: sorry, you must have a tty to run sudo'라는 오류 메시지가 나타납니다.
이 문제는 sudo가 기본적으로 tty를 요구되도록 구성된 Linux 배포판에서 실행하였기 때문에 발생할 가능성이 높습니다.
이것은 일반적으로 /etc/sudoers에서 Defaults requiretty가 설정 되어있을 것 입니다.
일부 Linux 배포판 에서는 이를 기본 설정으로 사용하는 것으로 알려져 있습니다.
RedHat은 최근에 이것을 Fedora 및 REHL에서 제거했습니다.

4. sudo: sorry, you must have a tty to run sudo. 해결하는 방법
범용적 또는 sudo 단일 사용자, 그룹 명령에 대해 requiretty를 비활성화할 수 있습니다.
이 기능을 범용적으로 비활성화하려면 /etc/sudoers에서 Defaults requiretty를 Defaults !requiretty로 수정.
또는 사용자별, 그룹별 또는 명령어별로 이 구성을 변경하려면 아래 예와 같이 사용할 수 있음.

/etc/sudoers 파일을 편집기를 사용하여 아래와 같이 사용.

#구문을 찾아 주석처리
#Defaults requiretty
#또는 requiretty 앞에 느낌표 표시
Defaults !requiretty

#단일 사용자 설정 예시
Defaults:username !requiretty

#명렁어 설정 예시
Defaults!/opt/my/bin !requiretty


5. pseudo-tty를 사용하여 tty 요구 사항 해결
pseudo-tty를 사용하려면 -t 옵션을 사용하여 ssh로 연결.
예: ssh -t username@host sudo command

728x90
반응형

댓글