의사 터미널(/dev/pts/*) 할당 제어

의사 터미널(/dev/pts/*) 할당 제어

연결이 제공되는 의사 터미널(/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/ttyNUMHAVE_DEV_PTMX

나는 이에 대해 강력히 권장합니다. 이는 비표준 구성이므로 추가 코드를 작성해야 합니다. 이는 추가 유지 관리 노력과 보안 위험입니다.

어쨌든 요점을 모르겠습니다. 실행하여 last각 터미널에 현재 로그인되어 있는 클라이언트를 확인할 수 있습니다.

관련 정보