Управление назначениями псевдотерминала (/dev/pts/*)

Управление назначениями псевдотерминала (/dev/pts/*)

Есть ли способ контролировать, какой псевдотерминал (/dev/pts/*) дается для соединения? Например, у меня есть несколько тонких клиентов, каждый из которых запускает отдельные терминальные сеансы с сервером RHEL через SSH, я хотел бы настроить что-то так, чтобы тонкому клиенту A всегда выделялось /dev/pts/7, а тонкому клиенту B всегда /dev/pts/8. Я пытался создать правило udev, но 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, используя устаревший API BSD, который создает pty в форме (master) и (slave). Это потребует как минимум перекомпиляции сервера SSH без настройки конфигурации, чтобы заставить его использовать pty в стиле BSD. Вам нужно будет позаботиться о разрешениях, хотя если SSH — единственный пользователь, это может быть немного проще. Тогда вам нужно будет пропатчить OpenSSH, чтобы добавить некий механизм для привязки определенного номера pty к определенному клиенту./dev/ptyNUM/dev/ttyNUMHAVE_DEV_PTMX

Я бы настоятельно не рекомендовал этого делать: это нестандартная конфигурация, требующая написания дополнительного кода. Это дополнительные усилия по обслуживанию и риск для безопасности.

Я вообще не вижу смысла. Можно запустить lastи посмотреть, какой клиент сейчас вошел в систему на каждом терминале.

Связанный контент