주어진 터미널이 연결된 의사 터미널(/dev/pts/*)을 제어할 수 있는 방법이 있습니까? 예를 들어, 각각 SSH를 통해 RHEL 서버에 대한 별도의 터미널 세션을 실행하는 여러 개의 씬 클라이언트가 있고 씬 클라이언트 A에는 항상 /dev/pts/7이 할당되고 씬 클라이언트 측면 B에는 항상 할당되도록 구성하고 싶습니다. /dev/pts /8. udev 규칙을 생성하려고 시도했지만 터미널 ID에 대해 udevinfo를 실행하면 "클래스 장치를 가져올 수 없습니다"만 반환되고 장치가 실제로 udev에 분류되지 않은 경우 규칙을 생성하는 방법을 잘 모르겠습니다.
답변1
Linux는 일반적으로 Unix 98 의사 터미널 인터페이스를 사용합니다. 항목은 /dev/pts
응용 프로그램 제어 외부에 할당됩니다. 의사 터미널(여기서는 SSH 서버)을 생성하려는 애플리케이션이 열리고 /dev/ptmx
의사 터미널을 할당하고 파일 설명자를 반환합니다. /dev/pts/
의사 터미널이 할당될 때 결정되는 의사 터미널 번호(뒤의 숫자)는 커널 데이터 구조의 의사 터미널 인덱스와 연결됩니다.
(궁금하시면 커널 코드는ptmx_open
존재하다drivers/tty/pty.c
, 이는devpts_new_index
존재하다fs/devpts/inode.c
, 이는ida_get_new
존재하다lib/idr.c
. 이는 사용 가능한 첫 번째 숫자를 반환하지만 항상 그렇게 한다는 보장은 없습니다. )
C API나 커널 API 모두 의사 터미널 작성자가 결과에 영향을 미치는 인수를 전달하는 것을 허용하지 않습니다.
정적 pty는 pty의 (마스터) 및 (슬레이브) 형태를 생성하는 이전 BSD API를 사용하여 얻을 수 있습니다. 이를 위해서는 최소한 BSD 스타일 pty를 사용하도록 설정을 구성하지 않고 SSH 서버를 다시 컴파일해야 합니다. 권한에 주의를 기울여야 하지만 SSH가 유일한 사용자라면 더 쉬울 수도 있습니다. 그런 다음 OpenSSH를 패치하여 특정 pty 번호를 특정 클라이언트에 바인딩하는 메커니즘을 추가해야 합니다./dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
나는 이 작업을 수행하지 말 것을 강력히 권장합니다. 이는 비표준 구성이므로 추가 코드를 작성해야 합니다. 이는 추가 유지 관리이며 안전 위험을 초래합니다.
어쨌든 나는 이것을 이해하지 못한다. 실행하여 last
각 터미널에 현재 로그인되어 있는 클라이언트를 확인할 수 있습니다.