有什麼方法可以控制給定哪個偽終端(/dev/pts/*)連線?例如,我有多個瘦客戶端,每個瘦客戶端都透過SSH 運行與RHEL 伺服器的單獨終端會話,我想進行一些配置,以便瘦客戶端A 始終分配為/dev/pts/7,瘦客戶端B 始終分配為/dev/pts /8。我一直在嘗試創建 udev 規則,但當我針對終端 ID 運行 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 都不允許偽終端的創建者傳遞會影響結果的參數。
可以透過使用產生(master) 和(slave) 形式的 pty 的舊 BSD API 來取得靜態 pty。這至少需要重新編譯 SSH 伺服器,而無需配置設定來強制其使用 BSD 樣式的 pty。您需要注意權限,但如果 SSH 是唯一的用戶,可能會更容易一些。然後,您需要修補 OpenSSH 以新增某種機制來將特定的 pty 編號與特定的用戶端綁定。/dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
我強烈建議不要這樣做:這是一個非標準配置,需要您編寫一些額外的程式碼。這是額外的維護工作並且存在安全風險。
無論如何,我不明白這一點。您可以運行last
來查看目前在每個終端上登入的用戶端。