Bagaimana saya bisa menonton jendela terminal dari jarak jauh?

8

Saya meninggalkan kantor sebelumnya dengan jendela terminal aktif menjalankan skrip pada server Centos 7. Sekarang saya sudah SSHing dari rumah dan saya ingin melihat di mana itu harus. Apakah ini mungkin? Bisakah saya bergabung kembali dengan jendela terminal yang sama dari sini?

samerivertwice
sumber
Kemungkinan rangkap: unix.stackexchange.com/questions/367370/…
Jakuje
Saya juga ingin menambahkan tmate.io ke semua jawaban di bawah ini
webKnjaZ
Satu pilihan adalah: strace -e write -p 12345(gantikan pid dari proses yang Anda minati). Pilihan lain adalah: strace -e read -p 12345(gantikan pid dari terminal emulator). Pada prinsipnya adalah mungkin untuk menulis sebuah program untuk menggunakan ptracesystem call untuk mengumpulkan informasi dengan cara yang stracesama, dan menulisnya langsung ke terminalnya sendiri. Saya tidak tahu apakah ada program seperti itu, tetapi itu akan mencakup persyaratan yang ditentukan dalam pertanyaan Anda.
kasperd
salah satu cara yang memungkinkan, aktifkan RPC (panggilan prosedur jarak jauh) pada komputer target maka Anda dapat (jarak jauh) terhubung dan mengontrol layar, termasuk jendela individual. Catatan: ini membuka kerentanan jadi pastikan untuk menonaktifkan RPC saat selesai.
user3629249

Jawaban:

14

Seperti yang disebutkan @Sven, opsi terbaik adalah menggunakan screenatau tmux. Ini adalah alat yang dikenal sebagai "terminal multiplexer". Mereka memungkinkan Anda untuk membuat sesi shell yang dapat dilampirkan dan dilepaskan dari login yang sebenarnya. Alat-alat ini tidak hanya berguna untuk memeriksa pekerjaan Anda dari terminal lain, tetapi memiliki fitur lain, termasuk berbagi sesi Anda dengan pengguna lain dan memastikan bahwa perintah Anda tidak berhenti jika Anda kehilangan koneksi internet Anda. Jika Anda mencari screen, Anda dapat mencoba mencari "Layar GNU". Kedua alat ini tersedia di sebagian besar sistem Linux.

Biasanya, Anda akan memulai sesi, dan kemudian jalankan perintah Anda di dalam sesi itu. Namun, jika Anda sudah memulai perintah, Anda mungkin ingin mencari artikel tentang memindahkan perintah yang sedang berjalan ke sesi layar. Saya tidak akan merekomendasikan mencoba ini pertama kali pada sesuatu yang penting. Pertanyaan ini mungkin bermanfaat:

Memindahkan proses yang sudah berjalan ke Screen

Jika Anda hanya ingin memeriksa untuk melihat apakah prosesnya berjalan, alat favorit saya adalah strace. Alat ini memungkinkan Anda untuk melihat setiap panggilan kernel yang dilakukan oleh suatu proses. Butuh beberapa keterampilan untuk memahami output, tetapi setidaknya harus memberi Anda ide jika prosesnya berjalan, dan jika Anda menonton cukup dekat, mungkin menangkap nama file yang dibuka. Untuk melakukan itu, pertama-tama, cari PID, mungkin dengan mencari melalui ps aux|grep yourcommand, dan kemudian:

strace -fp YOUR_PID

Anda dapat ^ C untuk keluar dari itu. Mungkin tidak memungkinkan Anda untuk melampirkan kembali, tetapi jika Anda hanya ingin tahu apa yang dilakukannya, itu sudah cukup.

DKing
sumber
Mengapa itu tidak memungkinkan Anda untuk melampirkan kembali?
HSchmale
@ HSmale Saya tidak yakin saya mengerti pertanyaan Anda. Jika Anda mengacu pada strace, program itu tidak memberi Anda terminal sama sekali. Itu hanya menunjukkan Anda panggilan kernel sedang dilakukan. Sering kali, ketika saya mencurigai suatu proses digantung, strace telah menunjukkan kepada saya file yang tepat sedang dikerjakan saat ini, jadi saya tahu di mana itu berada, dan bahwa itu tidak digantung.
DKing
Itu salah baca oleh saya, saya pikir Anda tidak akan dapat memasang kembali strace padanya, tetapi Anda bermaksud memasang kembali terminal untuk itu.
HSchmale
9

Salah satu cara untuk melakukannya: TMUX

Karena sebagian besar jawaban sudah ditunjukkan - jika dalam sesi SSH yang ada - Anda menggunakan tmux(atau screen) dengan perintah

tmux

Anda sekarang berada dalam sesi bash baru, di mana Anda dapat memulai program / perintah Anda. Anda dapat menutupnya kapan saja (tetapi tidak dengan CTRL + D, dengan menutup jendela) dan kembali lagi nanti dengan membangun koneksi SSH ke pengguna yang sama di mesin yang sama dan menulis perintah

tmux attach

Anda juga dapat memiliki beberapa tmux sesi dengan memberi mereka nama

tmux new -s myname

Anda dapat melihat daftar semua tmuxsesi terbuka untuk pengguna Anda

tmux ls

dan lampirkan ke tmuxsesi bernama dengan

tmux a -t myname

Temukan komprehensif di tmux cheat sheet sini .

Untuk program yang sedang berjalan

Jawaban sejauh ini tampaknya tidak menyadari fakta bahwa Anda dapat memindahkan proses yang sudah berjalan ke yang lain tmux/ screenseperti jawaban ini tunjukkan. Program yang melakukan pekerjaan dipanggil reptyrdan di bawah Ubuntu / Debian Anda dapat menginstalnya dengan sederhana

sudo apt-get install reptyr

Setelah itu, cari tahu ID proses dari program Anda yang sedang berjalan (misalnya dengan topatau htop), memulai tmuxsesi dan sederhana

reptyr PID

akan memasang kembali proses yang berjalan ke tmuxsesi bash Anda .

Manu CJ
sumber
5

Di masa mendatang, Anda dapat menggunakan screenatau tmuxdan kemudian dapat memasang kembali sesi lari.

Sven
sumber
3

Saya telah menggunakan byobu dan saya merasa sangat kuat. Byobu adalah window manager berbasis sumber terbuka GPLv3 dan multiplexer terminal.

Jadi, Anda dapat membuka sesi byobu hanya dengan mengetik "byobu". Dan kemudian Anda dapat membuat tab baru dengan Ctrl + F2, dan berpindah antar tab dengan Ctrl + F3 untuk kembali, Ctrl + F4 untuk maju. Anda dapat menutup tab dengan Ctrl + F6 atau melepaskan dari sesi dengan Shift + F6. Anda kemudian melampirkan kembali sesi dengan cukup mengetik "byobu" lagi.

Byobu mendukung pemisahan vertikal dan horizontal, Layar penuh di antara fitur-fitur mewah lainnya. Ini tersedia di Ubuntu / Debian, CentOS / Fedora / RedHat dan FreeBSD.

David Okwii
sumber
Tampaknya sedikit menyesatkan untuk memanggil byobu terminal multiplexer. Ini benar-benar hanya sebuah front-end untuk tmuxdan screenbanyak yang menemukan memberikan pengalaman pengguna yang lebih baik daripada yang mereka lakukan di luar kotak.
B Layer
2

Seperti yang sudah ditunjukkan, saya sarankan menggunakan tmuxatau screendi masa depan, tetapi itu hanya berfungsi jika Anda memikirkannya sebelumnya.

Saya sudah dalam situasi Anda beberapa kali. Jika terminal yang Anda jalankan berjalan di PC desktop kantor Anda, Anda dapat SSH ke PC Anda dan memulai server VNC. Dengan begitu, Anda setidaknya dapat memeriksa terminal terbuka.

Pablo Montepagano
sumber
0

Seperti yang disebutkan semua orang, tmux dapat digunakan. layar tidak berguna di mana Anda ingin berbagi layar dengan banyak orang.

Di atas semua itu saya menyarankan semua orang untuk mencoba https://tmate.io/ untuk memberikan akses sementara, bahkan ke mesin lokal. tmate mendukung semua hal di atas :)

https://tmate.io/

Anto
sumber