Jer*_* T. 3 terminal-emulator udev
有没有办法控制给出连接的伪终端(/dev/pts/*)?例如,我有多个瘦客户端,每个瘦客户端都通过 SSH 运行与 RHEL 服务器的单独终端会话,我想配置一些东西,以便瘦客户端 A 始终分配为 /dev/pts/7,而瘦客户端 B 始终分配为 /dev/pts /8。我一直在尝试创建 udev 规则,但是当我针对终端 ID 运行 udevinfo 时,它只返回“无法获取类设备”,如果设备实际上未在 udev 中分类,我不确定如何创建规则.
Linux 通常使用 Unix 98 伪终端接口。条目在/dev/pts
应用程序的控制之外分配。一个想要创建伪终端(这里是 SSH 服务器)的应用程序打开/dev/ptmx
,它分配一个伪终端并返回一个文件描述符给它。/dev/pts/
分配伪终端时确定的伪终端号(后的数字);它与内核数据结构中伪终端的索引相关联。
(如果你很好奇,内核代码是ptmx_open
in drivers/tty/pty.c
,它调用devpts_new_index
in fs/devpts/inode.c
,它使用ida_get_new
in lib/idr.c
。这恰好返回第一个可用的数字,尽管不能保证它总是这样做。)
C API 和内核 API 都不允许伪终端的创建者传递会影响结果的参数。
通过使用生成(master) 和(slave)形式的 pty 的遗留 BSD API,可能可以获得静态 pty 。这至少需要在没有配置设置的情况下重新编译 SSH 服务器以强制它使用 BSD 样式的 ptys。您需要注意权限,但如果 SSH 是唯一的用户,它可能会更容易一些。然后您需要修补 OpenSSH 以添加一些机制来将特定的 pty 编号绑定到特定的客户端。/dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
我强烈建议不要这样做:这是一种非标准配置,需要您编写一些额外的代码。这是额外的维护工作和安全风险。
反正我看不出重点。您可以运行last
以查看每个终端上当前登录的客户端。