Uzak SSH Oturumlarını ve İşlemleri Bağlantı Kesildikten Sonra Çalıştırmanın 5 Yolu


Basit bir ifadeyle SSH veya Secure Shell, bir kişinin başka bir sistemdeki başka bir kullanıcıya yalnızca komut satırında, yani GUI olmayan modda uzaktan erişebilmesinin bir yoludur. Daha teknik bir ifadeyle, başka bir sistemdeki başka bir kullanıcıya ssh gönderdiğimizde ve o makinede komutlar çalıştırdığımızda, bu aslında bir sözde terminal oluşturur ve onu oturum açmış olan kullanıcının oturum açma kabuğuna ekler.

Oturumdan çıkış yaptığımızda veya uzun bir süre boşta kaldıktan sonra oturum zaman aşımına uğradığında, SIGHUP sinyali sözde terminale ve bu terminalde çalıştırılan tüm işlere gönderilir. Ana işleri sözde terminalde başlatılan işlere de SIGHUP sinyali gönderilir ve sonlandırılmaya zorlanır.

Kaçırmayın: SSH Sunucusunu Güvenli ve Korumalı Tutmak için 5 Yararlı Uygulama

Yalnızca bu sinyali yok sayacak şekilde yapılandırılmış işler oturumun sonlandırılmasından sonra hayatta kalan işlerdir. Linux sistemlerinde, bu işlerin uzak sunucuda veya herhangi bir makinede, kullanıcı oturumu kapatıldıktan ve oturum sonlandırıldıktan sonra bile çalışmasını sağlamak için birçok yönteme sahip olabiliriz.

Linux'taki Süreçleri Anlayın

Normal Süreç

Normal süreçler bir oturumun ömrüne sahip olanlardır. Oturum sırasında ön plan işlemleri olarak başlatılırlar ve belirli bir zaman aralığında veya oturum kapatıldığında sona ererler. Bu süreçlerin sahibi, root da dahil olmak üzere sistemin geçerli herhangi bir kullanıcısıdır.

Yetim Süreci

Yetim süreçler, başlangıçta süreci yaratan bir ebeveyne sahip olan, ancak bir süre sonra ana süreç istemeden ölen veya çöken ve bu sürecin ebeveyni olmaya başlayan süreçlerdir. Bu tür süreçler, ölene veya bitene kadar bu süreçleri bekleyen doğrudan ebeveyn olarak başlatıcıya sahiptir.

Daemon Süreci

Bunlar kasıtlı olarak artık bırakılan bazı süreçlerdir; sistem üzerinde kasıtlı olarak çalışır durumda bırakılan bu tür işlemlere arka plan programı veya kasıtlı olarak artık bırakılan işlemler denir. Bunlar genellikle bir kez başlatılan ve daha sonra herhangi bir kontrol terminalinden ayrılan uzun süren işlemlerdir, böylece tamamlanıncaya kadar arka planda çalışabilirler veya sonunda bir hata verebilirler. Bu tür süreçlerin ebeveyni kasıtlı olarak ölür ve çocuğun arka planda çalışmasını sağlar.

Bağlantı Kesildikten Sonra SSH Oturumunu Devam Ettirme Teknikleri

Aşağıda açıklandığı gibi, bağlantı kesildikten sonra ssh oturumlarını çalışır durumda bırakmanın çeşitli yolları olabilir:

1. SSH Oturumlarını Çalıştırmak için ekran Komutunu Kullanma

ekran, Linux için, kullanıcının aynı anda birden fazla terminal oturumunu yönetmesine, oturumlar arasında geçiş yapmasına, ekranda çalışan oturumlar için oturum günlüğe kaydetmesine ve hatta oturumu istediğimiz zaman devam ettirmesine olanak tanıyan bir metin Pencere Yöneticisidir. oturumun kapatılması veya terminalin kapatılması konusunda endişelenmeden.

ekran oturumları başlatılabilir ve ardından kontrol terminalinden ayrılarak arka planda çalışır durumda bırakılabilir ve ardından herhangi bir zamanda ve hatta herhangi bir yerde devam ettirilebilir. Sadece oturumunuzu ekranda başlatmanız ve istediğiniz zaman onu sözde terminalden (veya kontrol terminalinden) ayırmanız ve oturumu kapatmanız yeterlidir. Hissettiğinizde yeniden giriş yapabilir ve oturuma devam edebilirsiniz.

Ekran Oturumu Başlatma

'screen' komutunu yazdıktan sonra yeni bir ekran oturumuna gireceksiniz, bu oturumda yeni pencereler oluşturabilir, pencereler arasında geçiş yapabilir, ekranı kilitleyebilir ve daha birçok işlemi yapabilirsiniz. normal bir terminal.

screen

Ekran oturumu başladıktan sonra herhangi bir komutu çalıştırabilir ve oturumu ayırarak oturumun çalışır durumda kalmasını sağlayabilirsiniz.

Ekranı Ayırma

Uzak oturumdan çıkış yapmak istediğinizde ve o makinede oluşturduğunuz oturumu canlı tutmak istediğinizde, yapmanız gereken tek şey ekranı terminalden ayırmak ve böylece üzerinde kontrol terminali kalmamasıdır. Bunu yaptıktan sonra güvenli bir şekilde çıkış yapabilirsiniz.

Uzak terminalden bir ekranı ayırmak için hemen “Ctrl+a ” tuşuna ve ardından “d ” tuşlarına basmanız yeterlidir; Ekranın açıldığını görerek terminale geri döneceksiniz. müstakildir. Artık güvenli bir şekilde çıkış yapabilirsiniz ve oturumunuz canlı kalacaktır.

Ayrılmış Ekran Oturumunu Sürdürme

Oturumu kapatmadan önce bıraktığınız ayrı bir ekran oturumunu sürdürmek istiyorsanız, uzak terminalde tekrar oturum açın ve yalnızca bir ekran açıksa ve birden fazla ekran açıksa “screen -r ” yazmanız yeterlidir. ekran oturumları açıldığında “screen -r komutunu çalıştırın.

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

Screen komutu ve nasıl kullanılacağı hakkında daha fazla bilgi edinmek için şu bağlantıyı takip etmeniz yeterlidir: Linux Terminal Oturumlarını Yönetmek için Screen Komutunu Kullanın

2. SSH Oturumlarını Çalıştırmak için Tmux'u (Terminal Çoklayıcı) Kullanmak

Tmux, ekran'ın yerini alacak şekilde oluşturulmuş başka bir yazılımdır. Ekranın özelliklerinin çoğuna sahiptir, ancak birkaç ek özellik onu ekrandan daha güçlü kılar.

Ekranın sunduğu tüm seçeneklerin yanı sıra, bölmeleri birden fazla pencere arasında yatay veya dikey olarak bölmeye, pencere bölmelerini yeniden boyutlandırmaya, oturum etkinliği izlemeye, komut satırı modunu kullanarak komut dosyası yazmaya vb. olanak tanır. Tmux'un bu özellikleri nedeniyle, neredeyse herkes tarafından geniş çapta benimsenmektedir. tüm Unix dağıtımları ve hatta OpenBSD'nin temel sistemine dahil edilmiştir.

Bir Tmux Oturumu başlatın

Uzak hostta ssh yapıp tmux yazdıktan sonra, normal bir terminalde yaptığınız her şeyi yapabileceğiniz, önünüzde açılan yeni bir pencere ile yeni bir oturuma gireceksiniz.

tmux

Terminal üzerinde işlemlerinizi gerçekleştirdikten sonra o oturumu kontrol terminalinden ayırarak arka plana geçebilir ve güvenli bir şekilde çıkış yapabilirsiniz.

Tmux Oturumunu Terminalden Ayırın

Tmux oturumunu çalıştırırken “tmux detach ” komutunu çalıştırabilir veya (Ctrl+b sonra d) kısayolunu kullanabilirsiniz. Bundan sonra mevcut oturumunuz kesilecek ve güvenli bir şekilde çıkış yapabileceğiniz terminalinize geri döneceksiniz.

tmux detach

Kapalı Tmux Oturumunu Sürdürme

Sistemden çıkış yaptığınızda ayırdığınız ve olduğu gibi bıraktığınız oturumu yeniden açmak için uzak makineye yeniden giriş yapın ve kapalı oturuma yeniden bağlanmak için “tmuxattap ” yazın ve oturum açın. hâlâ orada olacak ve koşuyor olacak.

tmux attach

Tmux ve nasıl kullanılacağı hakkında daha fazla bilgi edinmek için şu bağlantıyı takip etmeniz yeterlidir: Birden Fazla Linux Terminalini Yönetmek için Tmux Terminal Multiplexer'ı kullanın.

3. SSH Oturumlarını Çalıştırmaya Devam Etmek için Nohup Komutunu Kullanmak

screen veya tmux'a pek aşina değilseniz, nohup'u kullanabilir ve uzun süren komutunuzu arka plana göndererek devam edebilirsiniz. komut arka planda çalışmaya devam edecektir. Bundan sonra güvenle çıkış yapabilirsiniz.

Nohup komutuyla sürece, sonlandırıldığında ssh oturumu tarafından gönderilen SIGHUP sinyalini yok saymasını söyleriz, böylece oturum kapatıldıktan sonra bile komutun devam etmesini sağlarız. Oturum oturumu kapatıldığında komut, kontrol terminalinden çıkarılır ve arka planda daemon işlemi olarak çalışmaya devam eder.

Arka planda nohup kullanarak komut çalıştırma

Burada, nohup kullanarak ssh oturumunda arka planda dosyaları aramak için find komutunu çalıştırdığımız, ardından görevin arka plana gönderildiği ve hemen PID ve job ([JOBID] PID) işleminin >kimliği.

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

İşin hâlâ devam edip etmediğini görüntülemek için oturumu sürdürme

Tekrar oturum açtığınızda, komutun durumunu kontrol edebilir, ilerleme durumunu izlemek için 'fg %JOBID' kullanarak komutu tekrar ön plana getirebilirsiniz. Aşağıda çıktı, yeniden giriş yapıldığında gösterilmediğinden işin tamamlandığını ve görüntülenen çıktıyı verdiğini göstermektedir.

fg %JOBID

4. SSH Oturumlarını Çalıştırmak için Disown Komutunu Kullanmak

Komutunuzun veya tek bir görevin arka planda çalışmasına ve oturum kapatıldıktan veya bağlantı kesildikten sonra bile canlı kalmasına izin vermenin başka bir zarif yolu da disown özelliğini kullanmaktır.

Disown, işi sistemin süreç iş listesinden kaldırır, böylece süreç, oturum bağlantısı kesildiğinde kabuk tarafından SIGHUP'ı almayacağı için sonlandırılmaya karşı korunur. çıkış yap.

Bu yöntemin dezavantajı, yalnızca stdin'den herhangi bir girdiye ihtiyaç duymayan ve özellikle yönlendirme yapmadığınız sürece stdout'a yazılmasına gerek olmayan işler için kullanılması gerekmesidir. işlerin girişi ve çıkışı, çünkü iş stdin veya stdout ile etkileşime girmeye çalıştığında duracaktır.

Arka planda disown kullanılarak komut çalıştırılıyor

Aşağıda ut'un çalışmaya devam etmesi ve iş listesinden çıkarılması için arka plana ping komutunu gönderdik. Görüldüğü gibi iş önce askıya alındı, ardından İşlem Kimliği: 15368 olarak iş listesinde kalmaya devam etti.

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

Bundan sonra işe reddedilme sinyali iletildi ve iş listesinden kaldırıldı, ancak hala arka planda çalışıyordu. Aşağıda görüldüğü gibi uzak sunucuya yeniden giriş yaptığınızda iş hala çalışıyor olacaktır.

ps -ef | grep ping

5. SSH Oturumlarını Çalıştırmak için Setid Komutunu Kullanmak

Gerekli davranışı elde etmek için başka bir yardımcı program da setsid'dir. Nohup'un bir dezavantajı vardır: sürecin süreç grubu aynı kalır, dolayısıyla nohup ile çalışan süreç tüm süreç grubuna gönderilen herhangi bir sinyale karşı savunmasızdır (Ctrl + C< gibi) /kod>).

setsid ise yürütülen sürece yeni bir süreç grubu tahsis eder ve dolayısıyla oluşturulan süreç tamamen yeni tahsis edilen süreç grubunda yer alır ve oturum kapatıldıktan sonra bile öldürülme korkusu olmadan güvenli bir şekilde yürütülebilir.

Setsid'i kullanarak herhangi bir komutu yürütün

Burada 'sleep 10m' işleminin oluşturulduğu andan itibaren kontrol terminalinden ayrıldığını gösterir.

setsid sleep 10m
ps -ef | grep sleep

Artık oturuma yeniden giriş yaptığınızda bu işlemin hâlâ devam ettiğini göreceksiniz.

ps -ef | grep [s]leep

Çözüm

SSH oturumundan çıkış yaptıktan sonra bile sürecinizin devam etmesini sağlamak için ne gibi yollar düşünebilirsiniz? Aklınıza gelen başka ve etkili bir yol varsa yorumlarınızda belirtin.