TTY는 일반 파일과 어떻게 다릅니까? [복사]

TTY는 일반 파일과 어떻게 다릅니까? [복사]

내가 ssh이해 하려는 옵션은 -t다음과 같습니다.

-t 의사 터미널 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 이는 예를 들어 메뉴 서비스를 구현할 때 유용합니다. 여러 -t 옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.

따라서 TTY는 장치입니다. TTY를 참조하는 한 가지 방법은 설명자(TTY 장치를 열어 얻은)를 이용하는 것입니다. STDIN, STDOUT 및 STDERR은 설명자입니다. 그러나 반드시 TTY 장치를 참조하는 것은 아닙니다. -t옵션을 사용하면 TTY 장치를 참조하도록 강제됩니다. 이 옵션의 기능을 이해하기 위해 이것이 올바른 추론 방법입니까?

일반적인 STDIN, STDOUT 및 STDERR을 사용하여 달성할 수 없는 TTY의 특별한 점은 무엇입니까?

-t옵션 사용 사례의 예를 환영합니다.

ssh이 TTY는 어떤 메커니즘으로 할당되나요? ssh서버 또는 클라이언트에서 새 TTY를 생성 합니까 ? 이것을 확인하는 방법? (새 노드가 나타나야 합니다 /dev/...) 이 새로운 TTY는 기존 STDIN, STDOUT 및 STDERR에 어떻게 바인딩됩니까?

답변1

-t옵션은 [표준 파일 설명자]가 TTY 장치를 참조하도록 강제합니다. 이 옵션의 기능을 이해하기 위해 이것이 올바른 추론 방법입니까?

아니요. 이 -t옵션은외딴머신의 stdin/out/err은 한 쌍의 파이프가 아닌 pseudo-tty 슬레이브에 연결됩니다.

기본적으로 다음 조건이 충족되면 pty에서 실행됩니다.(ㅏ)명시적인 명령은 내려지지 않았고,(둘)SSH의 표준 입력고객그것은 그 자체로 tty입니다. -t경우에도(ㅏ)조건이 충족되지 않으며,그 중 ( -tt) 때(둘)만족스럽지 않습니다.

ssh는 TTY를 할당하기 위해 어떤 메커니즘을 사용합니까?

일부 시스템 종속 메커니즘을 통해. 오늘날 이는 주로 [1] master_fd = posix_openpt()이 뒤따르는 표준 입니다.slave_fd = open(ptsname(master_fd))

ssh는 서버 또는 클라이언트에서 새 TTY를 생성합니까?

ssh 언제나다음에 새로운 의사 tty를 생성합니다.섬기는 사람, 즉 원격 시스템에 있습니다. 서버에 pseudo-tty가 할당되고 로컬(클라이언트) stdin이 tty인 경우 로컬 tty는 원시 모드로 설정됩니다.

이것을 확인하는 방법? (새 노드가 나타나야 합니다 /dev/.

불필요한. 그러나 2019년 일반 Linux 시스템에서는 /dev/pts각각의 새로운 pseudo-tty 아래에 새 파일이 나타납니다.

이 새로운 TTY는 기존 STDIN, STDOUT 및 STDERR과 어떤 관련이 있습니까?

다른 파일 설명자와 마찬가지로 등을 사용 dup2(slave_fd, 0)하면 참조된 모든 파일이 닫힙니다 . pty가 할당되면 원격 세션에 대한 제어 tty도 됩니다.dup2(slave_fd, 1)dup2(newfd, oldfd)oldfd

-t옵션 사용 사례의 예를 환영합니다.

ssh -t /bin/bash로그인 쉘이 있는 시스템에서 csh. -t생략 하면 /bin/bash프롬프트, 작업 제어, 줄 편집 기능 등 없이 실행됩니다.

일반적인 STDIN, STDOUT 및 STDERR을 사용하여 달성할 수 없는 TTY의 특별한 점은 무엇입니까?

찾아보세요 ;-)

파이프는 tty나 다른 유형의 파일보다 더 이상 "일반적인" 표준 입력이 아닙니다.

[1] 그 자체로 많은 문제가 있습니다(네임스페이스를 마운트하고 마운트하기 위한 여러 devpt 사용). 이것이 TIOCGPTPEERLinux에 ioctl이 추가된 이유입니다. 이는 파일 시스템을 거치지 않고 슬레이브 장치를 참조하는 fd를 반환합니다.

관련 정보