擬似端末 (/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 も、疑似端末の作成者が結果に影響を与えるパラメータを渡すことを許可しません。

(マスター) および(スレーブ)形式の pty を生成する従来の BSD API を使用することで、静的 pty を取得できる可能性があります。これには、少なくとも、BSD スタイルの pty を使用するように強制する configure 設定なしで SSH サーバーを再コンパイルする必要があります。権限に注意する必要がありますが、SSH が唯一のユーザーである場合は、少し簡単かもしれません。次に、特定の pty 番号を特定のクライアントに結び付けるメカニズムを追加するように OpenSSH にパッチを適用する必要があります。/dev/ptyNUM/dev/ttyNUMHAVE_DEV_PTMX

これは非標準の構成であり、追加のコードを記述する必要があるため、強くお勧めしません。追加のメンテナンス作業とセキュリティ リスクが発生します。

とにかく意味がわかりません。last各端末に現在どのクライアントがログインしているかを確認するには、実行できます。

関連情報