5 Weeër fir Remote SSH Sessiounen a Prozesser Lafen ze halen nom Ofschloss


SSH oder Secure Shell an einfache Begrëffer ass e Wee duerch deen eng Persoun op engem anere Benotzer op engem anere System op afstand Zougang kann awer nëmmen an der Kommandozeil dh net-GUI Modus. A méi technesche Begrëffer, wa mir ssh op en anere Benotzer op engem anere System a lafen Kommandoen op där Maschinn, erstellt et tatsächlech e Pseudo-Terminal an befestegt et un d'Login-Shell vum Benotzer ageloggt.

Wa mir aus der Sessioun ausloggen oder d'Sessiounszäiten no enger laanger Zäit idle waren, gëtt de SIGHUP Signal un de Pseudo-Terminal geschéckt an all d'Aarbechten déi op deem Terminal lafen, och d'Aarbechten déi hir Elterenjobs hunn op de Pseudo-Terminal initiéiert ginn, ginn och de SIGHUP-Signal geschéckt a si gezwongen opzehalen.

Nëmmen d'Aarbechtsplazen, déi konfiguréiert sinn fir dëst Signal ze ignoréieren, sinn déi, déi d'Sessiounsterminatioun iwwerliewen. Op Linux Systemer kënne mir vill Weeër hunn fir dës Aarbechtsplazen um Remote Server oder all Maschinn ze maachen, och nom Benotzerlogout an Sessiounskündung.

Verstinn Prozesser op Linux

Normale Prozesser sinn déi, déi d'Liewensdauer vun enger Sessioun hunn. Si gi während der Sessioun als Virdergrond Prozesser gestart a kommen a gewëssen Zäitspann op oder wann d'Sessioun ausgeloggt gëtt. Dës Prozesser hunn hire Besëtzer als ee vun de gëltege Benotzer vum System, dorënner root.

Orphan Prozesser sinn déi, déi am Ufank en Elterendeel haten, deen de Prozess erstallt huet, awer no enger Zäit ass den Elterendeel onbedéngt gestuerwen oder erofgefall, sou datt den Init den Elterendeel vun deem Prozess ass. Esou Prozesser hunn Init als hiren direkten Elterendeel deen op dës Prozesser waart bis se stierwen oder ophalen.

Dëst sinn e puer bewosst verwaist Prozesser, sou Prozesser déi bewosst um System lafen loossen ginn als Daemon oder bewosst verwaist Prozesser bezeechent. Si sinn normalerweis laang lafende Prozesser, déi eemol initiéiert ginn an dann vun all Kontrollterminal getrennt sinn, sou datt se am Hannergrond kënne lafen bis se net ofgeschloss ginn, oder schlussendlech e Feeler werfen. Elterendeel vun esou Prozesser stierft bewosst datt d'Kand am Hannergrond ausféiert.

Techniken fir d'SSH Sessioun Lafen ze halen nom Ofschloss

Et kënne verschidde Weeër sinn fir ssh Sessiounen no der Trennung ze laafen ze loossen wéi hei ënnen beschriwwen:

Écran ass en Text Window Manager fir Linux deen de Benotzer erlaabt verschidde Terminal Sessiounen zur selwechter Zäit ze verwalten, tëscht Sessiounen ze wiesselen, Sessiounslogging fir déi lafen Sessiounen um Bildschierm, a souguer d'Sessioun erëm opzehuelen zu all Moment wou mir wëllen ouni Suergen iwwer d'Sessioun ze protokolléieren eraus oder den Terminal zougemaach gëtt.

Écran Sessiounen kënnen gestart ginn an dann vum kontrolléierten Terminal getrennt ginn, sou datt se am Hannergrond laafen an dann zu all Moment a souguer op all Plaz zréckgesat ginn. Just Dir musst Är Sessioun um Bildschierm starten a wann Dir wëllt, trennt se vum Pseudo-Terminal (oder dem Kontrollterminal) of a loggt aus. Wann Dir Iech fillt, kënnt Dir nei aloggen an d'Sessioun erëmfannen.

Nodeems Dir 'Écran' Kommando aginn hutt, sidd Dir an enger neier Ecran Sessioun, bannent dëser Sessioun kënnt Dir nei Fënsteren erstellen, tëscht Fënsteren duerchbriechen, den Ecran gespaarten a vill méi Saachen maachen, déi Dir op engem normale Terminal maache kënnt.

$ screen

Wann Écran Sessioun ugefaang huet, kënnt Dir all Kommando ausféieren an d'Sessioun laafen halen andeems Dir d'Sessioun trennt.

Just wann Dir wëllt aus der Fernsessioun ausloggen, awer Dir wëllt d'Sessioun, déi Dir op där Maschinn erstallt hutt, lieweg halen, da just wat Dir maache musst ass den Ecran vum Terminal ofzeschléissen, sou datt et kee Kontrollterminal lénks huet. Nodeems Dir dëst gemaach hutt, kënnt Dir sécher ausloggen.

Fir e Bildschierm vum Fernterminal ze trennen, dréckt just \Ctrl+a direkt gefollegt vun \d an Dir sidd zréck an den Terminal an Dir gesitt de Message datt den Écran ass ofgebaut. Elo kënnt Dir sécher ausloggen an Är Sessioun bleift um Liewen.

Wann Dir eng ofgebauter Bildschirm Sessioun widderhuelen wëllt, déi Dir verlooss hutt ier Dir Iech ausloggt, loggt Iech einfach erëm op de Fernterminal a gitt \screen -r am Fall wann nëmmen een Écran opgemaach ass, a wann Multiple Écran Sessiounen ginn opgemaach lafen \screen -r .

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

Fir méi iwwer Écran Kommando ze léieren a wéi Dir et benotzt, befollegt just de Link: Benotzt Écran Kommando fir Linux Terminal Sessiounen ze managen

Tmux ass eng aner Software déi erstallt ass fir en Ersatz fir Écran ze sinn. Et huet déi meescht vun de Fäegkeeten vum Écran, mat wéineg zousätzlech Fäegkeeten, déi et méi staark maachen wéi den Écran.

Et erlaabt, ausser all Optiounen, déi vum Écran ugebuede ginn, Schiermer horizontal oder vertikal tëscht multiple Fënsteren opzedeelen, d'Gréisst vun de Fënsterfenster änneren, Iwwerwaachung vun der Sessiounsaktivitéit, Skripting mam Kommandozeilmodus asw. all Unix Verdeelungen a souguer et gouf am Basissystem vun OpenBSD abegraff.

Nodeems Dir ssh um Fernhost gemaach hutt an tmux aginn hutt, gitt Dir an eng nei Sessioun mat enger neier Fënster déi virun Iech opmaacht, an där Dir alles maache kënnt wat Dir op engem normale Terminal maacht.

$ tmux

Nodeems Dir Är Operatiounen um Terminal gemaach hutt, kënnt Dir dës Sessioun vum Kontrollterminal ofhuelen, sou datt et an den Hannergrond geet an Dir kënnt sécher ausloggen.

Entweder Dir kënnt \tmux detach op enger tmux-Sessioun lafen oder Dir kënnt d'Ofkiirzung (Ctrl+b dann d) benotzen. Duerno gëtt Är aktuell Sessioun ofgekoppelt an Dir kommt zréck op Ären Terminal vu wou Dir Iech sécher ausloggen kënnt.

$ tmux detach

Fir d'Sessioun erëm opzemaachen, déi Dir ofgeschaaft hutt a lénks wéi ass wann Dir aus dem System ageloggt sidd, loggt Iech just op d'Fernmaschinn un an tippt \tmux attach fir erëm an déi zougemaach Sessioun ze befestigen an et wäert nach ëmmer do sinn an lafen.

$ tmux attach

Fir méi iwwer tmux ze léieren a wéi Dir et benotzt, befollegt just de Link: Benotzt Tmux Terminal Multiplexer fir Multiple Linux Terminals ze managen.

Wann Dir net sou vertraut mat Écran oder tmux sidd, kënnt Dir nohup benotzen an Äre laang lafende Kommando op den Hannergrond schéckt fir datt Dir weiderfuere kënnt, während de Kommando weider am Hannergrond ausféiert. Duerno kënnt Dir sécher ausloggen.

Mam nohup Kommando soen mir de Prozess fir de SIGHUP Signal ze ignoréieren deen duerch ssh Sessioun bei der Kënnegung geschéckt gëtt, sou datt de Kommando bestoe bleift och nom Sessiounslogout. Beim Sessiounslogout gëtt de Kommando vum Kontrollterminal ofgeleet a leeft weider am Hannergrond als Daemonprozess.

Hei ass en einfachen Szenario wou mir de Find Kommando lafen fir no Dateien am Hannergrond op ssh Sessioun ze sichen mat nohup, duerno gouf d'Aufgab an den Hannergrond geschéckt mat Prompt zréckginn direkt PID an Job ID vum Prozess ([ JOBID] PID).

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

Wann Dir erëm aloggen, kënnt Dir de Status vum Kommando iwwerpréiwen, se zréck an de Virdergrond bréngen mat fg %JOBID fir säi Fortschrëtt ze iwwerwaachen an sou weider. Drënner weist d'Ausgab datt d'Aarbecht fäerdeg war well se net beim Re-Login weist, an huet den Ausgang ginn deen ugewise gëtt.

# fg %JOBID

Eng aner elegant Manéier fir Äre Kommando oder eng eenzeg Aufgab am Hannergrond ze laafen an lieweg ze bleiwen och nom Sessiounslogout oder Trennung ass andeems Dir Disown benotzt.

Entlooss, läscht d'Aarbecht aus der Prozessjoblëscht vum System, sou datt de Prozess geschützt ass fir ëmbruecht ze ginn wärend der Sessiounsdekonnektioun well et net SIGHUP vun der Shell kritt wann Dir ausloggt.

Nodeel vun dëser Method ass, datt, et soll nëmmen fir d'Aarbecht benotzt ginn, datt keen Input vum stdin brauchen a weder brauchen ze stdout ze schreiwen, ausser Dir spezifesch Aarbechtsplazen Input an Output viruleeden, well wann Aarbecht wäert probéieren mat stdin ze interagéieren. oder stdout, et wäert ophalen.

Drënner hu mir Ping Kommando op den Hannergrond geschéckt sou datt ut weider leeft an aus der Aarbechtslëscht geläscht gëtt. Wéi gesi gouf d'Aarbecht fir d'éischt suspendéiert, duerno war et nach ëmmer an der Joblëscht als Prozess ID: 15368.

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

No deem Oflehnungssignal gouf op d'Aarbecht weidergeleet, an et gouf vun der Aarbechtslëscht geläscht, obwuel et nach ëmmer am Hannergrond leeft. D'Aarbecht wäert nach laafen wann Dir op de Remote-Server nei aloggen wéi hei ënnendrënner.

$ ps -ef | grep ping

En aneren Utility fir dat erfuerderlecht Verhalen z'erreechen ass Setsid. Nohup huet en Nodeel am Sënn datt d'Prozessgrupp vum Prozess d'selwecht bleift, sou datt de Prozess mat nohup vulnérabel ass fir all Signal dat un d'ganz Prozessgrupp geschéckt gëtt (wéi Ctrl + C).

setsid op der anerer Säit allokéiert en neie Prozessgrupp un de Prozess deen ausgefouert gëtt an dofir ass de erstallte Prozess ganz an enger nei zougewisener Prozessgrupp a ka sécher ausféieren ouni Angscht ëmbruecht ze ginn och nom Sessiounslogout.

Hei weist et datt de Prozess 'Schlof 10m' vum Kontrollterminal ofgeschaaft gouf, zënter der Zäit wou et erstallt gouf.

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

Elo, wann Dir d'Sessioun nei aloggen géift, fannt Dir nach ëmmer dëse Prozess lafen.

$ ps -ef | grep [s]leep

Conclusioun

Wéi eng Weeër kéint Dir denken fir Äre Prozess weider ze halen och nodeems Dir Iech vun der SSH Sessioun ofloggt? Wann et en aneren an effiziente Wee ass, deen Dir denke kënnt, ernimmt an Äre Kommentaren.