特定の端末が接続されている疑似端末(/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はどちらも、疑似端末作成者が結果に影響を与える引数を渡すことを許可しません。
静的ptyは、ptyの(マスター)および(スレーブ)形態を生成する以前のBSD APIを使用して得ることができる。これを行うには、少なくともBSDスタイルのptyを使用するように設定を構成せずにSSHサーバーを再コンパイルする必要があります。権限に注意を払う必要がありますが、SSHが唯一のユーザーであれば簡単になります。次に、OpenSSHにパッチを適用して特定のpty番号を特定のクライアントにバインドするメカニズムを追加する必要があります。/dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
私はこれをしないことを強くお勧めします。これは非標準構成なので、追加のコードを記述する必要があります。これは追加のメンテナンスであり、安全上のリスクをもたらします。
とにかく私はこれを理解していません。実行して、last
各端末に現在ログインしているクライアントを確認できます。