5 Cara Menjaga Sesi dan Proses SSH Jarak Jauh Tetap Berjalan Setelah Pemutusan Koneksi


SSH atau Secure Shell dalam istilah sederhananya adalah cara di mana seseorang dapat mengakses pengguna lain di sistem lain dari jarak jauh tetapi hanya di baris perintah, yaitu mode non-GUI. Dalam istilah yang lebih teknis, ketika kita melakukan ssh ke pengguna lain di sistem lain dan menjalankan perintah di mesin itu, itu sebenarnya membuat terminal semu dan melampirkannya ke shell login dari pengguna yang login.

Ketika kita logout dari sesi atau waktu sesi habis setelah tidak aktif selama beberapa waktu, sinyal SIGHUP dikirim ke terminal semu dan semua pekerjaan yang telah dijalankan di terminal tersebut, bahkan pekerjaan yang pekerjaan induknya dimulai pada terminal semu juga dikirimi sinyal SIGHUP dan dipaksa untuk dihentikan.

Jangan Lewatkan: 5 Praktik Berguna untuk Menjaga Server SSH Aman dan Terlindungi

Hanya pekerjaan yang telah dikonfigurasi untuk mengabaikan sinyal ini yang dapat bertahan dari penghentian sesi. Pada sistem Linux, kita memiliki banyak cara untuk membuat pekerjaan ini berjalan di server jarak jauh atau mesin apa pun bahkan setelah pengguna logout dan penghentian sesi.

Memahami Proses di Linux

Proses Biasa

Proses normal adalah proses yang mempunyai masa hidup suatu sesi. Mereka dimulai selama sesi sebagai proses latar depan dan berakhir dalam rentang waktu tertentu atau saat sesi keluar. Proses-proses ini memiliki pemiliknya sebagai pengguna sah sistem, termasuk root.

Proses Yatim Piatu

Proses yatim piatu adalah proses yang awalnya memiliki induk yang membuat proses tersebut tetapi setelah beberapa waktu, proses induk tersebut mati atau mogok secara tidak sengaja, menjadikan init sebagai induk dari proses tersebut. Proses-proses tersebut memiliki init sebagai induk langsungnya yang menunggu proses-proses ini hingga proses tersebut mati atau berakhir.

Proses Daemon

Ini adalah beberapa proses yang sengaja ditinggalkan, proses yang sengaja dibiarkan berjalan di sistem disebut sebagai daemon atau proses yang sengaja ditinggalkan. Ini biasanya merupakan proses yang berjalan lama yang sekali dimulai dan kemudian dilepaskan dari terminal pengontrol mana pun sehingga dapat berjalan di latar belakang hingga tidak selesai, atau berakhir dengan kesalahan. Induk dari proses tersebut sengaja mati sehingga membuat anak mengeksekusi di latar belakang.

Teknik Menjaga Sesi SSH Tetap Berjalan Setelah Pemutusan

Ada berbagai cara untuk membiarkan sesi ssh tetap berjalan setelah pemutusan sambungan seperti yang dijelaskan di bawah ini:

1. Menggunakan Perintah layar untuk Menjaga Sesi SSH Tetap Berjalan

layar adalah Window Manager teks untuk Linux yang memungkinkan pengguna mengelola beberapa sesi terminal secara bersamaan, beralih antar sesi, mencatat sesi untuk sesi yang sedang berjalan di layar, dan bahkan melanjutkan sesi kapan pun kita mau tanpa khawatir sesi akan logout atau terminal ditutup.

sesi layar dapat dimulai dan kemudian dilepaskan dari terminal pengontrol dan membiarkannya berjalan di latar belakang dan kemudian dilanjutkan kapan saja dan bahkan di mana saja. Anda hanya perlu memulai sesi Anda di layar dan bila Anda mau, lepaskan dari terminal semu (atau terminal pengontrol) dan keluar. Jika sudah merasa, Anda dapat login ulang dan melanjutkan sesi.

Memulai Sesi layar

Setelah mengetik perintah 'screen', Anda akan berada di sesi layar baru, dalam sesi ini Anda dapat membuat jendela baru, berpindah antar jendela, mengunci layar, dan melakukan banyak hal lainnya yang dapat Anda lakukan di layar. terminal biasa.

screen

Setelah sesi layar dimulai, Anda dapat menjalankan perintah apa pun dan menjaga sesi tetap berjalan dengan melepaskan sesi.

Melepaskan Layar

Saat Anda ingin keluar dari sesi jarak jauh, namun Anda ingin sesi yang Anda buat pada mesin itu tetap hidup, maka yang perlu Anda lakukan hanyalah melepaskan layar dari terminal sehingga tidak ada lagi terminal pengendali yang tersisa. Setelah melakukan ini, Anda dapat logout dengan aman.

Untuk melepaskan layar dari terminal jarak jauh, cukup tekan “Ctrl+a ” segera diikuti dengan “d ” dan Anda akan kembali ke terminal dan melihat pesan bahwa Layar terlepas. Sekarang Anda dapat keluar dengan aman dan sesi Anda akan tetap hidup.

Melanjutkan Sesi Layar Terpisah

Jika Anda ingin Melanjutkan sesi layar terpisah yang Anda tinggalkan sebelum keluar, cukup masuk kembali ke terminal jarak jauh lagi dan ketik “screen -r ” jika hanya satu layar yang dibuka, dan jika beberapa sesi layar dibuka jalankan “screen -r .

screen -r
screen -r <pid.tty.host>

Untuk mempelajari lebih lanjut tentang perintah layar dan cara menggunakannya cukup ikuti tautan: Gunakan Perintah layar untuk Mengelola Sesi Terminal Linux

2. Menggunakan Tmux (Terminal Multiplexer) untuk Menjaga Sesi SSH Tetap Berjalan

Tmux adalah perangkat lunak lain yang dibuat untuk menggantikan layar. Ia memiliki sebagian besar kemampuan layar, dengan sedikit kemampuan tambahan yang menjadikannya lebih hebat daripada layar.

Hal ini memungkinkan, terlepas dari semua opsi yang ditawarkan oleh layar, membagi panel secara horizontal atau vertikal antara beberapa jendela, mengubah ukuran panel jendela, pemantauan aktivitas sesi, pembuatan skrip menggunakan mode baris perintah, dll. Karena fitur-fitur tmux ini, ia telah menikmati adopsi yang luas oleh hampir semua orang. semua distro Unix bahkan sudah termasuk dalam sistem dasar OpenBSD.

Mulai Sesi Tmux

Setelah melakukan ssh pada host jarak jauh dan mengetik tmux, Anda akan masuk ke sesi baru dengan jendela baru terbuka di depan Anda, di mana Anda dapat melakukan apa pun yang Anda lakukan di terminal normal.

tmux

Setelah melakukan operasi Anda di terminal, Anda dapat melepaskan sesi tersebut dari terminal pengontrol sehingga sesi tersebut masuk ke latar belakang dan Anda dapat keluar dengan aman.

Lepaskan Sesi Tmux dari Terminal

Anda dapat menjalankan “tmux detach ” saat menjalankan sesi tmux atau Anda dapat menggunakan pintasan (Ctrl+b lalu d). Setelah ini sesi Anda saat ini akan dilepaskan dan Anda akan kembali ke terminal tempat Anda dapat keluar dengan aman.

tmux detach

Melanjutkan Sesi Tmux Tertutup

Untuk membuka kembali sesi yang Anda lepaskan dan biarkan seperti saat Anda keluar dari sistem, cukup masuk kembali ke mesin jarak jauh dan ketik “tmux lampirkan ” untuk melampirkan kembali ke sesi yang ditutup dan itu akan tetap ada dan berjalan.

tmux attach

Untuk mempelajari lebih lanjut tentang tmux dan cara menggunakannya cukup ikuti tautan: Gunakan Tmux Terminal Multiplexer untuk Mengelola Beberapa Terminal Linux.

3. Menggunakan perintah nohup untuk Tetap Menjalankan Sesi SSH

Jika Anda belum begitu familiar dengan screen atau tmux, Anda dapat menggunakan nohup dan mengirimkan perintah yang sudah berjalan lama ke latar belakang sehingga Anda dapat melanjutkan sambil perintah akan terus dijalankan di latar belakang. Setelah itu Anda dapat keluar dengan aman.

Dengan perintah nohup kita memberitahu proses untuk mengabaikan sinyal SIGHUP yang dikirim oleh sesi ssh pada saat penghentian, sehingga membuat perintah tetap ada bahkan setelah sesi logout. Pada sesi logout, perintah dihapus dari terminal pengontrol dan terus berjalan di latar belakang sebagai proses daemon.

Menjalankan perintah menggunakan nohup di latar belakang

Di sini, adalah skenario sederhana dimana, kita telah menjalankan perintah find untuk mencari file di latar belakang pada sesi ssh menggunakan nohup, setelah itu tugas dikirim ke latar belakang dengan prompt kembali segera memberikan PID dan pekerjaan ID proses ([JOBID] PID).

nohup find / -type f $gt; files_in_system.out 2>1 &

Melanjutkan sesi untuk melihat apakah pekerjaan masih berjalan

Ketika Anda login kembali, Anda dapat memeriksa status perintah, mengembalikannya ke latar depan menggunakan 'fg %JOBID' untuk memantau kemajuannya dan seterusnya. Di bawah ini, output menunjukkan bahwa pekerjaan telah selesai karena tidak muncul saat login ulang, dan telah memberikan output yang ditampilkan.

fg %JOBID

4. Menggunakan Perintah disown untuk Menjaga Sesi SSH Tetap Berjalan

Cara elegan lainnya untuk membiarkan perintah atau tugas Anda berjalan di latar belakang dan tetap aktif bahkan setelah sesi logout atau pemutusan koneksi adalah dengan menggunakan disown.

Tolak, menghapus tugas dari daftar tugas proses sistem, sehingga proses terlindung dari penghentian selama pemutusan sesi karena tidak akan menerima SIGHUP oleh shell saat kamu logout.

Kerugian dari metode ini adalah, metode ini harus digunakan hanya untuk pekerjaan yang tidak memerlukan masukan apa pun dari stdin dan juga tidak perlu menulis ke stdout, kecuali Anda secara khusus mengarahkan ulang input dan output pekerjaan, karena ketika pekerjaan mencoba berinteraksi dengan stdin atau stdout, pekerjaan akan terhenti.

Menjalankan perintah menggunakan penolakan di latar belakang

Di bawah ini, kami mengirimkan perintah ping ke latar belakang agar ut tetap berjalan dan dihapus dari daftar pekerjaan. Seperti yang terlihat, tugas tersebut pertama kali ditangguhkan, setelah itu masih ada dalam daftar tugas sebagai ID Proses: 15368.

ping linux-console.net > pingout &
jobs -l
disown -h %1
ps -ef | grep ping

Setelah itu, sinyal penolakan diteruskan ke pekerjaan, dan pekerjaan tersebut dihapus dari daftar pekerjaan, meskipun masih berjalan di latar belakang. Pekerjaan akan tetap berjalan ketika Anda login kembali ke server jarak jauh seperti yang terlihat di bawah ini.

ps -ef | grep ping

5. Menggunakan Perintah setid untuk Menjalankan Sesi SSH

Utilitas lain untuk mencapai perilaku yang diperlukan adalah setsid. Nohup mempunyai kelemahan dalam artian grup proses dari proses tersebut tetap sama sehingga proses yang berjalan dengan nohup rentan terhadap sinyal apa pun yang dikirim ke seluruh grup proses (seperti Ctrl + C).

setsid di sisi lain mengalokasikan grup proses baru ke proses yang sedang dieksekusi dan karenanya, proses yang dibuat sepenuhnya berada dalam grup proses yang baru dialokasikan dan dapat dijalankan dengan aman tanpa takut dimatikan bahkan setelah sesi logout.

Jalankan perintah apa pun menggunakan setid

Di sini, terlihat bahwa proses 'sleep 10m' telah terlepas dari terminal pengontrol, sejak proses tersebut dibuat.

setsid sleep 10m
ps -ef | grep sleep

Sekarang, ketika Anda masuk kembali ke sesi tersebut, Anda masih akan menemukan proses ini berjalan.

ps -ef | grep [s]leep

Kesimpulan

Cara apa yang dapat Anda pikirkan agar proses Anda tetap berjalan bahkan setelah Anda keluar dari sesi SSH? Jika ada cara lain dan efisien yang dapat Anda pikirkan, sebutkan di komentar Anda.