no tty present 및 no askpass program specified output line은 실제로 문제의 원인을 파악하지 못하기 때문에 도움이되지 않는 ssh 오류 메시지 중 하나입니다. 아마도 메시지를 볼 때 실제로 일종의 유효한 TTY로 작업하고있을 것이고 아마도 ssh를 통해 sudo 암호를 입력하는 것을 잘 처리했을 것입니다. 구문 오류를 처리 할 가능성이 높지만 메시지는이 사실을 직접적으로 다루지 않습니다.
이것은 ssh 자체와 관련된 문제이므로 Linux, FreeBSD, macOS 및 Microsoft Windows에서 Cygwin의 Unix 서비스에서 문제를 재현 할 수 있습니다. 다행히도 이러한 모든 플랫폼에서 수정 사항은 거의 동일해야합니다.
방법 1 : ssh 용 터미널 찾기
이미 터미널에서 작업하고 있지만 ssh는이를 인식하지 못할 수 있습니다. 명령 프롬프트 창 안에 있다는 사실에도 불구하고 여전히 TTY 터미널 에뮬레이터를 찾으려고 할 수 있습니다. 이를 테스트하려면 오류를 재현 해보십시오. 예제로 사용할 가상 머신을 구성하고 ssh user@linuxtest.example‘sudo /var/mail/startup.sh’ 테스트로. 당연히 명령 및 ssh 행을 수행하려는 작업과 일치하는 것으로 변경하고 싶을 것입니다.
자신이 생각했던 서버에 로그인하고 있는지 확인해야합니다. 그럼에도 불구하고 sudo : no tty present 및 no askpass program specified 오류 메시지가 계속 수신되는지 확인하십시오. 여전히 수신중인 경우 세 번 표시되며 Debian 또는 Ubuntu에서 로컬로 sudo를 실행하는 경우와 같은 방식으로 비밀번호를 입력하라는 메시지가 표시 될 수도 있습니다.
ssh 뒤에 -t를 추가하여 구문 오류를 수정하십시오. 10 번 중 9 번은 ssh가 가상 TTY를 자신에게 할당하고 실제 터미널 내부에서 실행되는 것처럼 가장합니다. 명령에 대해 다른 것을 변경할 필요가 없습니다. ssh 문자 뒤에 -t 옵션을 추가 한 다음 호스트와 전달 된 명령을 동일하게 유지하십시오. 명령의 후반부에서 ssh를 실행해야하는 경우에도이를 염두에 두어야합니다.
예를 들어 다음과 같은 형식의 명령을 실행할 때 이와 동일한 종류의 오류가 발생하는 경우 ssh -t user@linuxtest.example‘ssh user@linuxtest2.example’ 이를 방지하려면 첫 번째 ssh 이후에 -t 옵션을 유지해야합니다. 나중에 데이터를 생성하거나 사용하도록 두 번째 명령을 변경 한 경우 -t를 전혀 사용하지 않을 것입니다. 예를 들어, 스크립트 대신 cat 실행을 시작한 경우 터미널을 할당 할 필요가 없기 때문에 -t를 덤프 할 수 있습니다.
방법 2 : visudo 파일 패치
이 오류를 생성하는 구성 문제가있을 수도 있습니다. 다음을 실행하여 visudo 파일을 수정합니다. sudo visudo 다른 방법으로이 파일을 편집하고 싶지 않을 것입니다. ALL = NOPASSWD라는 줄과 그 뒤에 관리자의 암호를 입력 할 필요가없는 명령 유형이있는 줄을 찾아야합니다.
각 개별 명령은 줄의 마지막 명령을 제외하고 쉼표로 끝나야합니다. 따라서 / sbin / poweroff / sbin / start / sbin / stop과 같은 내용이있는 경우이 모든 항목을 단일 명령으로 처리하고 오류를 발생시킵니다. 마찬가지로 ssh를 통해 실행하려는 명령이 누락 된 경우에도이 오류가 발생합니다. 오류가 여전히 재현 가능한지 확인하기 전에 필요한 조정을하고 파일을 저장하십시오.
그렇게하고 서비스를 다시 시작한 후에도 여전히 오류가 발생하면 아래 이미지의 다음 명령 PermitTTY 라인 뒤에 yes라는 단어가 있는지 확인하십시오. 이것이 파일의 마지막 줄이면 나중에 빈 줄 바꿈이 있는지 확인하십시오. GNU nano는 기본적으로이 작업을 자동으로 수행합니다.
오류 메시지를 다시 재현하기 전에 모든 관련 서비스를 다시 시작해야합니다.
3 분 읽기