控制偽終端 (/dev/pts/*) 分配

控制偽終端 (/dev/pts/*) 分配

有什麼方法可以控制給定哪個偽終端(/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_opendrivers/tty/pty.c,這要求devpts_new_indexfs/devpts/inode.c,它使用ida_get_newlib/idr.c。這恰好會傳回第一個可用的數字,但不能保證它總是會這樣做。

C API 和核心 API 都不允許偽終端的創建者傳遞會影響結果的參數。

可以透過使用產生(master) 和(slave) 形式的 pty 的舊 BSD API 來取得靜態 pty。這至少需要重新編譯 SSH 伺服器,而無需配置設定來強制其使用 BSD 樣式的 pty。您需要注意權限,但如果 SSH 是唯一的用戶,可能會更容易一些。然後,您需要修補 OpenSSH 以新增某種機制來將特定的 pty 編號與特定的用戶端綁定。/dev/ptyNUM/dev/ttyNUMHAVE_DEV_PTMX

我強烈建議不要這樣做:這是一個非標準配置,需要您編寫一些額外的程式碼。這是額外的維護工作並且存在安全風險。

無論如何,我不明白這一點。您可以運行last來查看目前在每個終端上登入的用戶端。

相關內容