내가 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 사용). 이것이 TIOCGPTPEER
Linux에 ioctl이 추가된 이유입니다. 이는 파일 시스템을 거치지 않고 슬레이브 장치를 참조하는 fd를 반환합니다.