Gunakan
Ctrl-Z
untuk menjeda aplikasi dan kembali ke baris perintah. Lalu gunakan
bg
untuk memungkinkan proses untuk melanjutkan di latar belakang. Terakhir gunakan
disown
Agar proses tidak ditutup saat Anda memutus sesi dan menutup terminal.
Proses akan terus berjalan tetapi tidak ada cara untuk 'memasang kembali' ke terminal untuk melihat keluaran yang saya ketahui jika Anda menyambungkan kembali ke sesi baru.
Gunakan reptyr
Inilah kasusnya man 1 reptyr
secara eksplisit menyebutkan:
reptyr
adalah utilitas untuk mengambil program yang sedang berjalan dan melampirkannya ke terminal baru. Memulai proses yang berjalan lama melalui ssh, tetapi harus keluar dan tidak ingin menghentikannya? Mulai sajascreen
, gunakanreptyr
untuk mengambilnya, lalu matikan sesi ssh dan kembali ke beranda.
(Manual menyebutkan screen
, Anda dapat menggunakan tmux
sebagai gantinya, mana saja yang Anda suka).
Jangan lewatkan catatan ini:
reptyr
tergantung padaptrace(2)
panggilan sistem untuk dilampirkan ke program jarak jauh. Di Ubuntu Maverick dan yang lebih tinggi, kemampuan ini dinonaktifkan secara default karena alasan keamanan. Anda dapat mengaktifkannya sementara dengan melakukanecho 0 > /proc/sys/kernel/yama/ptrace_scope
sebagai root, atau secara permanen dengan mengedit file
/etc/sysctl.d/10-ptrace.conf
, yang juga berisi lebih banyak informasi tentang setelan ini.
Jika file tidak ada selain /etc/sysctl.d/
direktori melakukannya, maka mungkin cukup membuatnya dengan konten berikut:
kernel.yama.ptrace_scope = 0
Pengaturan akan diterapkan pada reboot berikutnya. Silakan lihat pertimbangan keamanan di bawah.
Penggunaan dasar
Penggunaan dasarnya sederhana:
reptyr PID
di mana PID
adalah PID dari proses yang ingin Anda lampirkan ke terminal baru. Perhatikan reptyr
hanya melampirkan proses ke terminal lain. Ini tidak berarti proses menjadi turunan dari shell baru.
Pertimbangan keamanan
Menyetel ptrace_scope
sebagai 0
tidak disarankan.
Seiring semakin populernya Linux, itu akan menjadi target malware yang lebih besar. Satu kelemahan yang sangat meresahkan dari antarmuka proses Linux adalah bahwa satu pengguna dapat memeriksa memori dan menjalankan status dari setiap proses mereka. Misalnya, jika satu aplikasi (mis. Pidgin) dikompromikan, penyerang dapat melampirkan ke proses lain yang sedang berjalan (mis. Firefox, sesi SSH, agen GPG, dll) untuk mengekstrak kredensial tambahan dan terus memperluas cakupan aplikasi mereka. serangan tanpa menggunakan phishing yang dibantu pengguna.
Ini bukan masalah teoretis. Serangan pembajakan sesi SSH (http://www.storm.net.nz/projects/7) dan injeksi kode arbitrer (http://c-skills.blogspot.com/2007/05/injectso.html) sudah ada dan tetap ada mungkin jika
ptrace
diperbolehkan beroperasi seperti semula. Sejakptrace
tidak umum digunakan oleh non-pengembang dan non-admin, pembuat sistem harus diberi opsi untuk menonaktifkan sistem debug ini.[…]
Pengaturan sysctl (hanya dapat ditulis dengan
CAP_SYS_PTRACE
) adalah:
0
- klasikptrace
izin:suatu proses dapatPTRACE_ATTACH
ke proses lain yang berjalan di bawah uid yang sama, asalkan dapat dibuang […]
1
-ptrace
terbatas :suatu proses harus memiliki hubungan yang telah ditentukan sebelumnya dengan inferior yang ingin dipanggilnyaPTRACE_ATTACH
pada. Secara default, hubungan ini hanya keturunannya jika kriteria klasik di atas juga terpenuhi. […]
2
- lampiran khusus admin:hanya memproses denganCAP_SYS_PTRACE
dapat menggunakanptrace
denganPTRACE_ATTACH
, atau melalui panggilan anakPTRACE_TRACEME
.
3
- tidak melampirkan:tidak ada proses yang dapat menggunakanptrace
denganPTRACE_ATTACH
maupun melaluiPTRACE_TRACEME
. Setelah disetel, nilai sysctl ini tidak dapat diubah.
Pendekatan yang masuk akal adalah menyetel ptrace_scope
ke 2
lalu izinkan reptyr
untuk menggunakan ptrace
:
echo 2 | sudo tee /proc/sys/kernel/yama/ptrace_scope
sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr
Jangan lupa tentang file yang menyimpan pengaturan permanen.
Kemampuan disimpan dalam inode file. Oleh karena itu saya tidak akan terkejut jika reptyr
kehilangan kemampuan saat diperbarui (secara atomik diganti dengan yang dapat dieksekusi baru).
Anda benar-benar dapat memisahkan perintah (dalam bash
atau zsh
, mungkin shell lain) dengan disown
memerintah. Namun perintah mungkin tidak senang dengan hal ini jika membutuhkan tty, dalam hal ini lihat reptyr
jawab.
$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+ Stopped sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$
Pilihan lainnya adalah memulai sesi layar (atau tmux) secara otomatis sehingga Anda tidak dapat lupa untuk memulainya karena sesi tersebut sudah dimulai untuk Anda karena Anda mengaturnya seperti itu. Ada pos lain di tempat lain tentang cara melakukannya.