È possibile aprire un terminale con tty / pty specificato


9

(Sto usando Ubuntu.) Nella mia comprensione tty è solo una specie di porta. Inserisci qualcosa e dovrebbe emettere qualcosa. E un terminale (emulatore) è un software che gestisce l'input e l'output. Letteralmente il terminale può scegliere a quale porta connettersi.

Ho visto molti file tty in / dev e molti file pts in / dev / pts / Non so perché ce ne siano così tanti. Vengono tutti usati?

In caso contrario, posso avviare un terminale con pty specificato?

per esempio gnome-terminal /dev/pts/47

Aggiornare

Il motivo per cui lo faccio è che voglio avere un terminale remoto. So che l'approccio appropriato è usare ssh o telnet.

Ma per l'accesso temporaneo, non è molto conveniente. Voglio usare socat per inoltrare un tty o un pty al client. Quindi il client può avviare un terminale con quel pty o tty.

Il seguente codice funziona bene. Viene eseguito sul client e sul lato server ottengo "ciao".

echo "hello" > /home/myhomefoler/pty_created_by_socat

Risposte:


9

Su UNIX, un tty (come molte altre cose) appare come un file. I dati scritti sul dispositivo tty vanno al terminale e i dati provenienti dal terminale sono disponibili per la lettura sul tty.

Se tty è una porta seriale hardware, i dati scritti su di essa vengono inviati sul filo e i dati provenienti dal filo vengono visualizzati sul filo.

Se tty è una console video di una macchina, i dati scritti su di essa vengono visualizzati sullo schermo e i dati provenienti dalla tastiera vengono visualizzati su tty.

Se tty è uno pseudo-tty (terminale virtuale) collegato a un emulatore di terminale X come ad esempio i gnome-terminaldati scritti su di esso vengono consegnati al software dell'emulatore di terminale X e a loro volta vengono visualizzati in una finestra, mentre sono disponibili i dati digitati in quella finestra per la lettura sul terminale virtuale. Si dice che il software sia collegato all'estremità "master" dello pseudo-terminale. I terminali reali non hanno un fine "master" perché dietro di loro c'è un dispositivo reale (come la porta seriale), non un dispositivo virtuale implementato da un software.

Quindi puoi già vedere che non avrebbe alcun senso chiedere a un emulatore di terminale X di operare su un dispositivo tty arbitrario come /dev/ttyS0(una vera porta seriale, su Linux). Deve essere una pseudo-tty.

Ma l'emulatore di terminale può scegliere l'ID numerico del dispositivo pseudo-terminale che utilizza? In linea di principio, sarebbe possibile che un kernel lo permetta, ma in realtà l'interfaccia del kernel per allocare un nuovo pseudo-terminale non lo supporta: il kernel fa la sua scelta. (Nel modello SysV i pesudo-terminali vengono creati aprendo un dispositivo speciale chiamato /dev/ptmxe lo pseudo-terminale disponibile con il numero più basso disponibile viene assegnato automaticamente.)

Ma: perché dovresti scegliere il numero del dispositivo pseudo-terminale che viene assegnato? Il kernel ne sceglie uno inutilizzato che è garantito per essere disponibile e utilizzabile. Hai un motivo per cui preferiresti se ne scegliesse uno diverso?

Per quanto riguarda l'altra domanda:

Ho visto molti file tty in / dev e molti file pts in / dev / pts / Non so perché ce ne siano così tanti. Vengono tutti usati?

Dipende dal sistema. Su alcuni sistemi, tutti i possibili dispositivi pseudo-terminali sono pre-creati in /dev/ptso /dev, indipendentemente dal fatto che siano in uso o meno. Su altri, i nodi del dispositivo esistono solo se lo pseudo-terminale è in uso. Dici che stai usando Ununbu, che usa Linux, che è quest'ultimo tipo. Quindi sì, tutti i nodi dei dispositivi che vedi /dev/ptssono attualmente in uso.

Ma per l'accesso temporaneo, non è molto conveniente. Voglio usare socat per inoltrare un tty o un pty al client. Quindi il client può avviare un terminale con quel pty o tty.

Se si desidera socato qualsiasi altro software per connettersi all'estremità principale di uno pseudo-terminale, è necessario che tale software supporti specificamente tale operazione. Ma sei fortunato perché lo socatfa. Ad esempio, se corro:

socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1

Posso ottenere una shell collegandomi alla porta 2222 da qualche altra parte. Molto pericoloso dal punto di vista della sicurezza !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.