Computer >> 컴퓨터 >  >> 문제 해결 >> Linux

sudo: tty가 없고 askpass 프로그램이 지정되지 않았습니다 오류 해결 방법

오류 메시지의 의미

'tty가 없고 askpass 프로그램이 지정되지 않았습니다(no tty present and no askpass program specified)'라는 출력은 원인을 정확히 짚어주지 못하는 대표적인 SSH 오류 메시지 중 하나입니다. 이 메시지가 표시될 때 실제로는 유효한 TTY를 사용하고 있는 경우가 대부분이며, SSH를 통해 sudo 비밀번호를 입력하는 데에도 별다른 문제가 없었을 가능성이 높습니다. 대체로 문제의 진짜 원인은 단순한 구문(syntax) 실수인데도, 오류 메시지는 이 사실을 직접적으로 알려주지 않습니다.

이 문제는 SSH 자체와 관련된 것이기 때문에 Linux, FreeBSD, macOS, 그리고 Microsoft Windows의 Cygwin 유닉스 서비스 등 어디서든 재현될 수 있습니다. 다행히 해결 방법은 모든 플랫폼에서 거의 동일합니다.

방법 1: SSH용 터미널 찾기

터미널에서 작업하고 있음에도 SSH가 이를 인식하지 못하는 경우가 있습니다. 명령 프롬프트 창 안에 있는데도 SSH는 여전히 TTY 터미널 에뮬레이터를 찾으려 할 수 있습니다. 먼저 오류를 재현해 보며 상태를 확인해 보세요. 예시를 위해 가상 머신을 구성하고 ssh user@linuxtest.example 'sudo /var/mail/startup.sh' 명령을 실행해 테스트했습니다. 물론 실제 환경에 맞게 명령어와 SSH 라인을 변경해서 사용하면 됩니다.

sudo: tty가 없고 askpass 프로그램이 지정되지 않았습니다 오류 해결 방법

의도했던 서버에 로그인하고 있는지도 함께 확인하세요. 그런 다음 여전히 'sudo: no tty present and no askpass program specified' 오류가 발생하는지 살펴봅니다. 오류가 계속된다면 메시지가 세 번 반복해서 표시되고, Debian이나 Ubuntu에서 로컬로 sudo를 실행할 때처럼 비밀번호 입력을 요구받을 수도 있습니다.

구문 오류를 바로잡으려면 ssh 뒤에 -t 옵션을 추가해 보세요. 십중팔구 이 옵션이 SSH가 스스로 가상 TTY를 할당하도록 강제하여, 마치 실제 터미널 안에서 실행되는 것처럼 동작하게 만들어 줍니다. 명령어의 다른 부분은 바꿀 필요가 없습니다. ssh 뒤에 -t 옵션만 추가하고 호스트와 전달할 명령은 그대로 두면 됩니다. 명령어 후반부에 ssh를 한 번 더 실행해야 하는 경우에도 이 점을 기억해 두세요.

예를 들어 ssh -t user@linuxtest.example 'ssh user@linuxtest2.example' 형태의 명령에서 같은 오류가 발생한다면, 첫 번째 ssh 뒤의 -t 옵션을 유지해야 합니다. 다만 두 번째 명령이 데이터를 생성하거나 소비하는 용도라면 -t를 아예 사용하지 않는 것이 좋습니다. 예컨대 스크립트 대신 cat을 실행한다면 터미널을 할당할 필요가 없으므로 -t 옵션을 제거해도 무방합니다.

방법 2: visudo 파일 수정

설정 문제로 인해 이 오류가 발생하는 경우도 있습니다. sudo visudo 명령으로 visudo 파일을 편집하세요. 이 파일은 반드시 visudo를 통해서만 편집해야 하며, 다른 방식으로는 절대 직접 수정하지 않는 것이 좋습니다. 파일에서 ALL = NOPASSWD가 포함된 줄을 찾으면, 그 뒤에 관리자 비밀번호 없이 실행할 수 있는 명령 종류들이 나열되어 있습니다.

각 개별 명령은 해당 줄의 마지막 항목을 제외하고 반드시 쉼표로 끝나야 합니다. 따라서 /sbin/poweroff /sbin/start /sbin/stop처럼 쉼표 없이 나열하면 이들을 하나의 명령으로 간주하여 오류가 발생합니다. 마찬가지로 SSH를 통해 실행하려는 명령이 목록에 누락되어 있어도 같은 오류가 나타납니다. 필요한 조정을 마치고 파일을 저장한 뒤, 오류가 여전히 재현되는지 확인하세요.

서비스를 재시작한 후에도 오류가 계속된다면 아래 이미지의 명령을 실행하고 PermitTTY 줄 뒤에 yes가 표시되어 있는지 확인하세요. 이 줄이 파일의 마지막 줄이라면 뒤에 빈 줄이 이어지는지도 점검해야 합니다. GNU nano는 기본적으로 이 작업을 자동으로 처리해 줍니다.

sudo: tty가 없고 askpass 프로그램이 지정되지 않았습니다 오류 해결 방법

오류 메시지를 다시 재현해 보기 전에 관련 서비스를 모두 재시작해야 합니다.