pseudo-tty의 목적은 무엇입니까?


최상의 답변

터미널에서 프로그램을 실행하면 프로그램을 일괄 작업으로 실행할 때없는 추가 기능이 제공됩니다. 예를 들어, 터미널에서 프로세스를 실행하는 경우 Ctrl + C를 눌러 중단 할 수 있지만 프로세스가 터미널과 연결되지 않은 경우 Ctrl + C로 중단 할 수 없습니다. kill 또는 이와 유사한 것을 실행합니다. 터미널에 대해서는이 답변에서 자세히 설명합니다.

원격 sshd 프로세스는 키보드와 화면의 역할을 맡기 위해 의사 터미널 쌍을 사용합니다. 원격 프로세스가 /dev/tty1와 같은 “true”터미널에서 읽는 경우 키보드에서 바로 입력을받습니다. 대신 sshd 프로세스는 키 입력을 의사 터미널의 마스터 끝에 기록하여 원격 프로세스에 전달합니다. 실행중인 프로그램은 마치 키보드에서 오는 것처럼 의사 터미널의 슬레이브 끝에서 데이터를 수신합니다. 마찬가지로 프로세스가 의사 터미널의 슬레이브 끝에 쓸 때, 그것은 마치 “화면에 문자를 인쇄하는”진정한 “터미널에 쓰기. 그러나 대신 sshd는 마스터 측에 기록 된 데이터를 읽고 암호화 한 다음 유선을 통해 다시 사용자에게 보냅니다.

터미널없이 일어나는 일을 확인하려면 , ssh -T remote.host와 같은 것을 실행 해보십시오. 원격 호스트에서 쉘을 시작하지만, 쉘은 터미널이 없기 때문에 프롬프트를 출력하지 않고 배치 모드에서 실행되고 있다고 생각합니다. 또한 sudo는 암호를 읽는 대신 터미널에 입력해야하기 때문에 원격 호스트에서 sudo를 실행할 수 없습니다. 표준 입력에서 가져옵니다.

기본적으로 원격 sshd는 명령을 지정하지 않은 경우에만 pty를 할당합니다. ssh remote.host screen를 시도하면 “명령을 지정하면 pty 할당이 억제되고”다시 문제가 발생한다는 것을 알 수 있습니다. 이를 방지하려면 -t 옵션을 지정하면 원격 sshd가 항상 터미널 할당을 시도합니다.

ssh가 파일에서 읽는 경우와 같이 통신 할 로컬 끝에 터미널이없는 경우. 이 경우 ssh -t -t를 사용하여 pty 할당을 강제 할 수 있습니다. 원격 끝은 마치 키보드에서 입력 한 것처럼 ssh “의 표준 입력에 기록 된 모든 바이트에 반응하기 때문에 의도하지 않은 결과가 발생할 수 있습니다. 예를 들어, Ctrl + C at 키보드는 ASCII 코드 3을 생성하므로 로컬 ssh가 입력 파일에서 값 3을 가진 바이트를 읽어야하는 경우이를 원격 호스트로 전달합니다. 원격 sshd는이를 pty의 마스터 끝에 쓰고 커널은 SIGINT를 슬레이브 끝에서 읽는 프로세스로 보냅니다. 터미널은 흥미로운 생물입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다