首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >控制伪终端(/dev/pt/*)分配

控制伪终端(/dev/pt/*)分配
EN

Unix & Linux用户
提问于 2015-11-02 20:44:47
回答 1查看 2.6K关注 0票数 4

有没有任何方法来控制哪个伪终端(/dev/pt/*)是给定的连接?例如,我有多个瘦客户机,每个瘦客户机通过SSH运行到RHEL服务器的各个终端会话,我想配置一些东西,这样瘦客户机A总是分配/dev/pt/7,瘦客户机B总是/dev/pt/8。我一直在尝试创建一个udev规则,但是udevinfo只返回“无法获得类设备”,当我针对终端ID运行它时,我不确定如何创建规则,如果设备实际上不是在udev中被分类的。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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来查看当前在每个终端上登录的客户端。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/240352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档