5 viisi SSH kaugseansside ja -protsesside töötamise tagamiseks pärast ühenduse katkestamist


SSH või Secure Shell lihtsustatult on viis, kuidas inimene pääseb kaugelt juurde teisele kasutajale teises süsteemis, kuid ainult käsureal, st mitte-GUI režiimis. Täpsemalt öeldes, kui me kasutame mõne teise süsteemi kasutajaid edasi ja käivitame selles masinas käske, loob see tegelikult pseudoterminali ja kinnitab selle sisseloginud kasutaja sisselogimiskesta külge.

Kui logime seansist välja või seanss aegub pärast pikka aega jõudeolekut, saadetakse signaal SIGHUP pseudoterminalile ja kõigile selles terminalis käivitatud töödele, isegi töödele, millel on vanema töökohad pseudoterminalil algatatutele saadetakse ka signaal SIGHUP ja nad on sunnitud katkestama.

Ainult töökohad, mis on konfigureeritud seda signaali eirama, jäävad seansi katkestamise jaoks ellu. Linuxi süsteemides võib meil olla palju viise, kuidas need tööd kaugserveris või mis tahes masinas töötama panna ka pärast kasutaja väljalogimist ja seansi lõpetamist.

Linuxi protsesside mõistmine

Tavalised protsessid on need, millel on seansi eluiga. Neid alustatakse seansi ajal esiplaanidena ja need jõuavad teatud ajaperioodi jooksul või siis, kui seanss logitakse välja. Nendel protsessidel on omanik kui ükskõik milline süsteemi kehtiv kasutaja, sealhulgas juur.

Orvuprotsessid on need, millel algselt oli protsessi loonud vanem, kuid mõne aja pärast suri vanem protsess tahtmatult kokku või kukkus kokku, muutes init selle protsessi vanemaks. Sellised protsessid on nende vahetu vanem, kes ootab neid protsesse kuni nende surmani või lõpuks.

Need on mõned tahtlikult orvuks jäetud protsessid, selliseid süsteemis tahtlikult töötama jäetud protsesse nimetatakse deemoniteks või tahtlikult orbudeks. Need on tavaliselt pikaajalised protsessid, mis käivitatakse üks kord ja seejärel lahutatakse mis tahes juhtterminalist, nii et nad saaksid töötada taustal, kuni need pole lõpule jõudnud või lõpuks viskavad vea. Selliste protsesside vanem sureb tahtlikult, pannes lapse taustal hukkama.

Tehnikad, kuidas SSH-seanss pärast ühenduse katkestamist töötab

Pärast ühenduse katkestamist võib ssh-seansside töötamise jätta mitmel viisil, nagu allpool kirjeldatud:

ekraan on tekstiakna haldur Linuxile, mis võimaldab kasutajal korraga hallata mitut terminaliseanssi, vahetada seansside vahel, ekraanil jooksvate seansside seansilogimist ja isegi seansi jätkamist igal ajal, kui soovime, muretsemata seansi logimise pärast välja või terminal suletakse.

ekraani seansse saab alustada ja seejärel kontrollseadmest lahti ühendada, jättes need taustal töötama ja seejärel jätkata igal ajal ja isegi igas kohas. Lihtsalt peate alustama seanssi ekraanil ja kui soovite, eraldage see pseudoterminalist (või juhtterminalist) ja väljalogimisest. Kui tunnete, saate uuesti sisse logida ja seanssi jätkata.

Pärast käsku 'ekraan' sisestamist olete uues ekraaniseansis. Selles seansis saate luua uusi aknaid, liikuda akende vahel, lukustada ekraani ja teha palju muud, mida saate teha tavalises terminalis.

$ screen

Kui ekraaniseanss on alanud, saate seansi lahti ühendades käivitada mis tahes käsu ja hoida seanssi töötavana.

Just siis, kui soovite kaugseansist välja logida, kuid soovite selles masinas loodud seanssi elus hoida, peate lihtsalt ekraani terminalist lahti ühendama, nii et sellel ei oleks enam ühtegi juhtimisterminali. Pärast seda saate turvaliselt välja logida.

Ekraani eemaldamiseks kaugterminalist vajutage lihtsalt klahvi \"Ctrl + a" , millele järgneb kohe \"d" , ja naasete terminali juurde, kui näete teadet ekraan on lahti. Nüüd saate turvaliselt välja logida ja teie seanss jääb elus.

Kui soovite enne väljalogimist jätkata eraldatud ekraaniseanssi, logige uuesti uuesti sisse kaugterminali ja tippige \"screen -r" juhul, kui avatakse ainult üks ekraan ja kui avatakse mitu ekraaniseanssi, käivitage \"screen -r " .

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

Lisateabe saamiseks ekraanikäsu ja selle kasutamise kohta järgige linki: Kasutage Linuxi terminaliseansside haldamiseks ekraani käsku

Tmux on teine tarkvara, mis on loodud ekraani asendamiseks. Sellel on suurem osa ekraani võimalustest, väheste lisavõimalustega, mis muudavad selle ekraanist võimsamaks.

Lisaks kõigile ekraani pakutavatele võimalustele võimaldab see paanide horisontaalset või vertikaalset jaotamist mitme akna vahel, aknaklaaside suuruse muutmist, seansi aktiivsuse jälgimist, skriptimist käsurea režiimis jne. Tänu nendele tmuxi funktsioonidele on seda juba peaaegu laiaulatuslikult kasutusele võtnud kõik Unixi distributsioonid ja isegi see on lisatud OpenBSD põhisüsteemi.

Pärast kaughostil ssh-i tegemist ja tmux-i sisestamist sisenete uude seanssi, mille ees on uus aken, kus saate teha kõike, mida teete tavalises terminalis.

$ tmux

Pärast operatsioonide tegemist terminalis saate selle seansi kontrollterminalist lahti ühendada, nii et see läheb taustale ja saate turvaliselt välja logida.

Võite käivitada tmux-seansi käivitamisel \"tmux detach" või kasutada otseteed (Ctrl + b, siis d) . Pärast seda eraldatakse teie praegune seanss ja tulete tagasi oma terminali, kust saate turvaliselt välja logida.

$ tmux detach

Seansi uuesti avamiseks, mille lahutasite ja lahkusite sellisena, nagu logisite süsteemist välja, logige lihtsalt kaugseadmesse uuesti sisse ja sisestage kinnitatud seansile uuesti kinnitamiseks\"tmux attach" ja see jääb endiselt alles jooksmine.

$ tmux attach

Tmuxi ja selle kasutamise kohta lisateabe saamiseks järgige linki: Kasutage mitme Linuxi terminali haldamiseks Tmuxi terminali multiplekserit.

Kui te pole ekraani või tmuxiga nii tuttav, võite kasutada nohup-i ja saata oma pika käsu taustale, et saaksite jätkata, kui käsk jätkab taustal täitmist. Pärast seda saate turvaliselt välja logida.

Käsuga nohup käskime protsessil ignoreerida SIGHUP-signaali, mille ssh-seanss lõpetamisel saadab, muutes käsu püsima ka pärast seansi väljalogimist. Seansi väljalogimisel eraldatakse käsk juhtterminalist ja see töötab taustal deemoniprotsessina.

Siin on lihtne stsenaarium, kus oleme käivitanud käsu find, et otsida ssh-seansi taustal olevaid faile nohup-i abil. Pärast seda saadeti ülesanne taustale, tagastades viivitamatult protsessi PID ja töö ID ([ TÖÖDE] PID) .

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

Uuesti uuesti sisse logides saate käsu olekut kontrollida ja selle uuesti esiplaanile tuua, kasutades fg% JOBID , et jälgida selle edenemist jne. Allpool näitab väljund, et töö oli lõpule viidud, kuna seda ei kuvata uuesti sisselogimisel, ja on andnud väljundi, mis kuvatakse.

# fg %JOBID

Teine elegantne viis lasta käsul või üksikul ülesandel taustal töötada ja jääda ellu ka pärast seansi väljalogimist või ühenduse katkestamist, on keeldumise abil.

Keeldu, eemaldab töö süsteemi protsessitööde loendist, nii et protsess on varjatud seansi katkestamise ajal tapmise eest, kuna väljalogimisel ei saa shell SIGHUP-i.

Selle meetodi puuduseks on see, et seda tuleks kasutada ainult tööde jaoks, mis ei vaja stdinilt sisendit ega pea stdouti kirjutama, välja arvatud juhul, kui suunate tööde sisendi ja väljundi spetsiaalselt ümber, sest kui töö üritab stdiniga suhelda või stdout, see peatub.

Allpool saatsime taustale käsu ping, et ut jätkaks töötamist ja eemaldataks töökohtade loendist. Nagu näha, peatati see töö kõigepealt, pärast mida oli see endiselt tööde nimekirjas kui protsessi ID: 15368.

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

Pärast seda, kui töölt edastati keeldumise signaal ja see eemaldati töökohtade loendist, kuigi see töötas endiselt taustal. Töö töötab endiselt, kui logite uuesti kaugserverisse sisse, nagu allpool näha.

$ ps -ef | grep ping

Nõutava käitumise saavutamiseks on veel üks utiliit. Nohupil on puudus selles mõttes, et protsessi protsessigrupp jääb samaks, nii et nohupiga töötav protsess on haavatav kogu protsessirühmale saadetud mis tahes signaali suhtes (näiteks Ctrl + C ).

Seevastu setid eraldab käivitatavale protsessile uue protsessigrupi ja seega on loodud protsess täielikult uues eraldatud protsessigrupis ja seda saab turvaliselt käivitada, kartmata tapmist ka pärast seansi väljalogimist.

Siin näitab see, et protsess ‘sleep 10m’ on juhtimisterminalist eraldatud alates selle loomise ajast.

$ setsid sleep 10m
$ ps -ef | grep sleep

Nüüd, kui soovite seansi uuesti sisse logida, leiate selle protsessi ikkagi käimas.

$ ps -ef | grep [s]leep

Järeldus

Kuidas võiksite mõelda, et hoida oma protsess käimas ka pärast SSH-seansilt välja logimist? Kui saate mõelda mõnele muule ja tõhusale viisile, mainige seda oma kommentaarides.