Apakah mungkin untuk membuka terminal dengan tty / pty yang ditentukan

9

(Saya menggunakan Ubuntu.) Dalam pemahaman saya tty hanyalah semacam port. Anda memasukkan sesuatu dan itu akan menghasilkan sesuatu. Dan terminal (emulator) adalah perangkat lunak yang menangani input dan output tersebut. Terminal secara harfiah dapat memilih port mana yang akan dihubungkan.

Saya melihat banyak file tty di / dev dan banyak file pts di / dev / pts / Saya tidak tahu mengapa ada begitu banyak dari mereka. Apakah semuanya digunakan?

Jika tidak, bisakah saya memulai terminal dengan pty yang ditentukan?

misalnya gnome-terminal /dev/pts/47

Memperbarui

Alasan saya melakukan ini adalah saya ingin memiliki terminal jarak jauh. Saya tahu pendekatan yang tepat adalah dengan menggunakan ssh atau telnet.

Tetapi untuk akses sementara, itu sangat tidak nyaman. Saya ingin menggunakan socat untuk meneruskan tty atau pty ke klien. Kemudian klien dapat memulai terminal dengan pty atau tty itu.

Kode berikut berfungsi dengan baik. Ini dieksekusi pada klien dan di sisi server saya mendapatkan "halo".

echo "hello" > /home/myhomefoler/pty_created_by_socat
Worldterminator
sumber

Jawaban:

9

Pada UNIX, tty (seperti banyak hal lainnya) muncul sebagai file. Data yang ditulis ke perangkat tty pergi ke terminal dan data yang berasal dari terminal tersedia untuk dibaca di tty.

Jika tty adalah port serial perangkat keras, maka data yang ditulis kepadanya akan dikirim pada kabel dan data yang berasal dari kawat muncul di tty.

Jika tty adalah konsol video mesin, maka data yang ditulis untuk itu akan ditampilkan di layar dan data yang berasal dari keyboard muncul di tty.

Jika tty adalah pseudo-tty (terminal virtual) yang terhubung ke emulator terminal X seperti gnome-terminalkemudian data yang ditulis untuk itu akan dikirim ke perangkat lunak terminal emulator X dan pada gilirannya akan ditampilkan di jendela, sementara data yang diketikkan ke jendela itu tersedia untuk membaca di terminal virtual. Perangkat lunak ini dikatakan terhubung ke "master" ujung pseudo-terminal. Terminal nyata tidak memiliki ujung "master" karena ada perangkat nyata di belakangnya (seperti port serial), bukan perangkat virtual yang diimplementasikan oleh perangkat lunak.

Jadi Anda sudah dapat melihat bahwa tidak masuk akal untuk meminta emulator terminal X untuk beroperasi pada perangkat tty sewenang-wenang seperti /dev/ttyS0(port serial nyata, di Linux). Itu pasti pseudo-tty.

Tetapi bisakah emulator terminal memilih ID numerik perangkat pseudo-terminal yang digunakannya? Pada prinsipnya, dimungkinkan bagi sebuah kernel untuk mengizinkan ini, tetapi pada kenyataannya antarmuka kernel untuk mengalokasikan pseudo-terminal baru tidak mendukungnya: kernel menentukan pilihannya sendiri. (Dalam model SysV pesudo-terminal dibuat dengan membuka perangkat khusus yang disebut /dev/ptmxdan perangkat pseudo-terminal bernomor terendah yang tersedia dialokasikan secara otomatis.)

Tetapi: mengapa Anda harus memilih jumlah perangkat pseudo-terminal yang dialokasikan? Kernel memilih kernel yang tidak digunakan yang dijamin tersedia dan dapat digunakan. Apakah Anda punya alasan mengapa Anda lebih suka jika memilih yang lain?

Seperti untuk Anda pertanyaan lain:

Saya melihat banyak file tty di / dev dan banyak file pts di / dev / pts / Saya tidak tahu mengapa ada begitu banyak dari mereka. Apakah semuanya digunakan?

Tergantung sistemnya. Pada beberapa sistem, semua perangkat terminal pseudo yang mungkin sudah dibuat sebelumnya /dev/ptsatau /dev, apakah sedang digunakan atau tidak. Pada yang lain, node perangkat hanya ada jika terminal pseudo sedang digunakan. Anda mengatakan Anda menggunakan Ununbu, yang menggunakan Linux, yang merupakan tipe yang terakhir. Jadi, ya, semua perangkat node yang Anda lihat /dev/ptssaat ini sedang digunakan.

Tetapi untuk akses sementara, itu sangat tidak nyaman. Saya ingin menggunakan socat untuk meneruskan tty atau pty ke klien. Kemudian klien dapat memulai terminal dengan pty atau tty itu.

Jika Anda ingin socatatau peranti lunak lain terhubung ke terminal master pseudo-terminal, maka Anda perlu peranti lunak itu untuk secara khusus mendukung hal itu. Tetapi Anda beruntung karena socattidak. Misalnya, jika saya menjalankan:

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

Saya bisa mendapatkan shell dengan menghubungkan ke port 2222 dari tempat lain. Sangat berbahaya dari sudut pandang keamanan !!!

Celada
sumber