Gibt es eine Möglichkeit zu steuern, an welches Pseudoterminal (/dev/pts/*) eine Verbindung gegeben wird? Ich habe beispielsweise mehrere Thin Clients, die jeweils einzelne Terminalsitzungen zu einem RHEL-Server über SSH ausführen. Ich möchte etwas so konfigurieren, dass Thin Client A immer /dev/pts/7 und Thin Client B immer /dev/pts/8 zugewiesen wird. Ich habe versucht, eine Udev-Regel zu erstellen, aber Udevinfo gibt nur „das Klassengerät konnte nicht abgerufen werden“ zurück, wenn ich es für die Terminal-ID ausführe. Ich bin nicht sicher, wie ich eine Regel erstellen soll, wenn das Gerät nicht tatsächlich in Udev klassifiziert ist.
Antwort1
Linux verwendet normalerweise die Pseudoterminal-Schnittstelle von Unix 98. Einträge in /dev/pts
werden außerhalb der Kontrolle der Anwendung zugewiesen. Eine Anwendung, die ein Pseudoterminal erstellen möchte (hier der SSH-Server), öffnet /dev/ptmx
, das ein Pseudoterminal zuweist und ihm einen Dateideskriptor zurückgibt. Die Pseudoterminalnummer (die Nummer nach /dev/pts/
) wird bestimmt, wenn das Pseudoterminal zugewiesen wird; sie ist an den Index des Pseudoterminals in einer Kernel-Datenstruktur gebunden.
(Wenn Sie neugierig sind, der Kernel-Code istptmx_open
Indrivers/tty/pty.c
, die fordertdevpts_new_index
Infs/devpts/inode.c
, dasida_get_new
Inlib/idr.c
. Dies gibt zufällig die erste verfügbare Nummer zurück, es gibt jedoch keine Garantie, dass dies immer der Fall ist.)
Weder die C-API noch die Kernel-API erlauben es dem Ersteller des Pseudoterminals, einen Parameter zu übergeben, der das Ergebnis beeinflussen würde.
Möglicherweise ist es möglich, ein statisches PTY zu erhalten, indem Sie die alte BSD-API verwenden, die PTYs der Form (Master) und (Slave) erzeugt. Dies würde mindestens eine Neukompilierung des SSH-Servers ohne die Konfigurationseinstellung erfordern, um ihn zur Verwendung von PTYs im BSD-Stil zu zwingen. Sie müssten sich um die Berechtigungen kümmern, obwohl es etwas einfacher sein könnte, wenn SSH der einzige Benutzer ist. Dann müssten Sie OpenSSH patchen, um einen Mechanismus hinzuzufügen, der eine bestimmte PTY-Nummer an einen bestimmten Client bindet./dev/ptyNUM
/dev/ttyNUM
HAVE_DEV_PTMX
Ich rate dringend davon ab: Es handelt sich um eine nicht standardmäßige Konfiguration, für die Sie zusätzlichen Code schreiben müssen. Dies bedeutet zusätzlichen Wartungsaufwand und stellt ein Sicherheitsrisiko dar.
Ich sehe den Sinn sowieso nicht. Sie können nachsehen, last
welcher Client derzeit an jedem Terminal angemeldet ist.