有没有任何方法来控制哪个伪终端(/dev/pt/*)是给定的连接?例如,我有多个瘦客户机,每个瘦客户机通过SSH运行到RHEL服务器的各个终端会话,我想配置一些东西,这样瘦客户机A总是分配/dev/pt/7,瘦客户机B总是/dev/pt/8。我一直在尝试创建一个udev规则,但是udevinfo只返回“无法获得类设备”,当我针对终端ID运行它时,我不确定如何创建规则,如果设备实际上不是在udev中被分类的。
发布于 2015-11-02 21:25:30
Linux通常使用Unix 98伪终端接口。/dev/pts
中的条目是在应用程序控制之外分配的。希望创建伪终端(这里是SSH服务器)的应用程序将打开/dev/ptmx
,后者分配伪终端并向其返回文件描述符。伪终端数(/dev/pts/
后的数目)决定了分配伪终端的时间;它与内核数据结构中的伪终端索引相关联。
(如果您好奇的话,内核代码是ptmx_open
in drivers/tty/pty.c
,它在fs/devpts/inode.c
中调用devpts_new_index
,后者在lib/idr.c
中使用ida_get_new
。这恰好返回了第一个可用的数字,尽管不能保证它总是这样做。)
无论是C API还是内核API,都不允许伪终端的创建者传递影响结果的参数。
可以通过使用遗留的BSD获得静态pty,该API生成/dev/ptyNUM
(主)和/dev/ttyNUM
(从级)的ptys。这至少需要在没有HAVE_DEV_PTMX
配置设置的情况下重新编译SSH服务器,以强制它使用BSD样式的ptys。您需要处理权限,但如果SSH是唯一的用户,则可能会容易一些。然后,您需要对OpenSSH进行修补,以添加一些机制来将特定的pty编号绑定到特定的客户端。
我强烈建议您不要这样做:这是一种非标准配置,需要您编写一些额外的代码。这是额外的维护工作和安全风险。
反正我也不明白重点。您可以运行last
来查看当前在每个终端上登录的客户端。
https://unix.stackexchange.com/questions/240352
复制相似问题