연결이 제공되는 의사 터미널(/dev/pts/*)을 제어할 수 있는 방법이 있습니까? 예를 들어, 각각 SSH를 통해 RHEL 서버에 대한 개별 터미널 세션을 실행하는 여러 개의 씬 클라이언트가 있습니다. 씬 클라이언트 A는 항상 /dev/pts/7에 할당되고 씬 클라이언트 B는 항상 /dev/pts에 할당되도록 구성하고 싶습니다. /8. udev 규칙을 생성하려고 시도했지만 udevinfo는 터미널 ID에 대해 실행할 때 "클래스 장치를 가져올 수 없습니다"만 반환합니다. 장치가 실제로 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를 생성하는 레거시 BSD API를 사용하여 정적 pty를 얻는 것이 가능할 수 있습니다 . 이를 위해서는 최소한 BSD 스타일 pty를 사용하도록 강제하기 위해 구성 설정 없이 SSH 서버를 다시 컴파일해야 합니다. 권한을 관리해야 하지만 SSH가 유일한 사용자인 경우 조금 더 쉬울 수 있습니다. 그런 다음 OpenSSH를 패치하여 특정 pty 번호를 특정 클라이언트에 연결하는 메커니즘을 추가해야 합니다./dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
나는 이에 대해 강력히 권장합니다. 이는 비표준 구성이므로 추가 코드를 작성해야 합니다. 이는 추가 유지 관리 노력과 보안 위험입니다.
어쨌든 요점을 모르겠습니다. 실행하여 last
각 터미널에 현재 로그인되어 있는 클라이언트를 확인할 수 있습니다.