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

수정:stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.

대부분의 경우 스크립트에서 일종의 SSH 명령을 실행할 때만 "stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다"라는 혼란스러운 오류가 표시됩니다. 명령줄에서 동일한 명령을 실행하는 경우 완벽하게 작동할 수 있습니다.

더 진행하기 전에 SSH 에이전트에 공개 키를 추가했는지 확인한 다음 ssh를 다시 사용해 보세요. 열쇠를 잃어버렸을 수도 있습니다. 반면에 이것이 작동하지 않으면 스크립트에서 약간의 문제 해결을 수행해야 합니다.

방법 1:유사 tty 할당 강제 및 비활성화

문제를 신속하게 해결할 수 있는 한 쌍의 명령줄 옵션이 있습니다. 의사 터미널 할당을 강제 실행하기 위해 ssh -t -t -R 다음에 연결하려는 나머지 항목을 시도하십시오. 예를 들어, ssh -p 80 appuals@ssh.example.com을 사용하여 example.com의 계정에 로그인한다고 가정해 보겠습니다. 물론 존재하지 않는 문서의 더미입니다.

예를 들어 실행해보십시오. ssh -t -t -R -p 80 appuals@ssh.example.com으로 이동하여 문제가 해결되는지 확인합니다. 물론 시스템에 성공적으로 로그인하려면 이름을 실제 계정과 호스트 이름으로 바꿔야 합니다. 이렇게 하면 터미널이 강제로 할당되므로 stdin이 터미널 오류가 아니기 때문에 의사 터미널이 할당되지 않는 것을 볼 수 없습니다.

반면에 오류 메시지가 계속해서 표시될 수도 있습니다. 일부 사용자는 이것이 재미있을 수 있다고 언급했습니다.

그럼에도 불구하고 확실히 실망스럽기 때문에 Ctrl+C를 사용하여 프로세스를 종료하십시오.

수정:stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.

-t 스위치를 하나만 사용하거나 숫자를 늘릴 수 있습니다. 이것이 작동하지 않으면 명령에서 -t 스위치를 -T 스위치로 바꾸십시오. ssh -T -R -p 80 appuals@ssh.example.com 및 작동하는지 확인하십시오.

이 방법은 전체 의사 터미널 할당 프로세스를 모두 비활성화하므로 강제로 수행하지 않는 경우에 작동할 수 있습니다. 물론 이 중 어느 것도 명령줄에서 문제가 되어서는 안 되지만 스크립트에서 작동하는 옵션을 찾았을 때 해당 서버에 액세스하기 위해 실행해야 하는 향후 스크립트에서 사용할 수 있도록 메모해 두십시오.

ssh 명령은 이 두 개의 반대 옵션에 유사한 이름을 부여했으므로 -t는 의사 터미널 할당을 강제하는 반면 -T는 비활성화합니다. 이러한 옵션은 대소문자를 구분하며 ssh가 작동하려면 전통적인 TTY 터미널이 필요하기 때문에 스크립트 내부에서 종종 필요합니다. 당연히 귀하의 경우 터미널 에뮬레이터를 이러한 용도로 사용하게 될 것입니다.

방법 2:sshpass 사용

어떤 사람들은 기본적으로 포함되지 않은 sshpass 명령으로 스크립트가 더 잘 작동한다는 것을 알 수 있습니다. 시도해 보고 싶거나 특정 사용 사례에 필요하기 때문에 언제든지 sudo apt-get install sshpass 또는 sudo yum install sshpass를 사용하여 설치할 수 있습니다.

아직 사용하고 있지 않다면 아마도 필요하지 않을 것입니다. 그럼에도 불구하고 이러한 종류의 환경에서도 의사 터미널 할당과 관련된 오류 메시지를 놀라게 하기 위해 동일한 기술을 사용할 수 있습니다.

예를 들어, sshpass -p password ssh -T appuals@ssh.example.com을 사용하여 시스템이 스크립트 내부에서 작동하도록 합니다.

방법 3:작업 관리 오류 수정

이 모든 것을 수정한 후에도 다른 오류 메시지가 표시되는 경우가 있습니다. tty에 대한 액세스 권한이 없다는 경고를 받은 후 셸에 작업 제어가 없다는 메시지가 표시되면 어느 정도 정상적으로 작업할 수 있어야 합니다.

이 오류는 csh, tcsh 또는 Almquist 또는 기타 셸과 관련된 원격 서버의 불규칙한 문제로 인해 발생합니다. 다른 오류 메시지를 받았기 때문에 눈치채지 못했을 수도 있지만 의사 터미널에 대해 다른 사람이 표시되지 않는다면 평소와 같이 비교적 계속할 수 있을 것입니다.

이 경우 프로세스를 중지하기 위해 Ctrl+Z를 사용하고 싶지 않을 수 있습니다. 프로세스를 다시 시작하게 할 방법이 없을 수 있기 때문입니다. 종료할 때 중지된 작업이 있다는 오류 메시지가 표시되면 로그아웃이 허용되지 않습니다.

수정:stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.

ps 및 kill 명령을 사용하여 종료할 수 없는 모든 작업을 닫으십시오. 단, 프로세스에서 작업 손실을 걱정하지 않아도 됩니다. 지금 나갈 수 있습니다.