5 måter å holde eksterne SSH-økter og -prosesser i gang etter frakobling


SSH eller Secure Shell i enkle termer er en måte som en person kan eksternt få tilgang til en annen bruker på et annet system, men bare i kommandolinje, dvs. ikke-GUI-modus. I mer tekniske termer, når vi ssh videre til en annen bruker på et annet system og kjører kommandoer på den maskinen, oppretter den faktisk en pseudoterminal og fester den til påloggingsskallet til brukeren som er logget på.

Når vi logger ut av økten eller økten blir tidsavbrutt etter å ha vært inaktiv en stund, sendes SIGHUP-signalet til pseudoterminalen og alle jobbene som har blitt kjørt på den terminalen, til og med jobbene som har sine overordnede jobber blir initiert på pseudoterminalen, sendes også SIGHUP-signalet og blir tvunget til å avslutte.

Ikke gå glipp av: 5 nyttige fremgangsmåter for å holde SSH-serveren sikker og beskyttet

Bare jobbene som er konfigurert til å ignorere dette signalet, er de som overlever øktavslutningen. På Linux-systemer kan vi ha mange måter å få disse jobbene til å kjøre på den eksterne serveren eller hvilken som helst maskin selv etter brukerutlogging og øktavslutning.

Forstå prosesser på Linux

Normal prosess

Normale prosesser er de som har levetiden til en økt. De startes under økten som forgrunnsprosesser og ender opp i et bestemt tidsrom eller når økten blir logget ut. Disse prosessene har sin eier som en av de gyldige brukerne av systemet, inkludert root.

Foreldreløs prosess

Foreldreløse prosesser er de som i utgangspunktet hadde en forelder som skapte prosessen, men etter en tid døde eller krasjet foreldreprosessen utilsiktet, noe som gjorde at init ble forelderen til den prosessen. Slike prosesser har init som sin nærmeste forelder som venter på disse prosessene til de dør eller ender opp.

Daemon-prosess

Dette er noen bevisst foreldreløse prosesser, slike prosesser som med vilje kjøres på systemet kalles demon eller bevisst foreldreløse prosesser. De er vanligvis langvarige prosesser som en gang er initiert og deretter løsrevet fra enhver kontrollerende terminal slik at de kan kjøre i bakgrunnen til de ikke blir fullført, eller ender opp med å kaste en feil. Forelder til slike prosesser dør med vilje og får barn til å henrette i bakgrunnen.

Teknikker for å holde SSH-økten i gang etter frakobling

Det kan være forskjellige måter å la ssh-økter kjøre etter frakobling som beskrevet nedenfor:

1. Bruke skjermkommando for å holde SSH-økter i gang

skjerm er en tekstvindusbehandler for Linux som lar brukeren administrere flere terminaløkter samtidig, bytte mellom økter, sesjonslogging for de løpende øktene på skjermen, og til og med gjenoppta økten når som helst vi ønsker uten å bekymre deg for at økten blir logget ut eller terminalen stenges.

skjermøkter kan startes og deretter kobles fra den kontrollerende terminalen slik at de kjører i bakgrunnen og deretter gjenopptas når som helst og til og med hvor som helst. Bare du trenger å starte økten på skjermen og når du vil, koble den fra pseudoterminalen (eller den kontrollerende terminalen) og logge ut. Når du føler det, kan du logge på på nytt og gjenoppta økten.

Starter en skjermøkt

Etter å ha skrevet 'skjerm'-kommandoen, vil du være i en ny skjermøkt, i denne økten kan du opprette nye vinduer, gå mellom vinduer, låse skjermen og gjøre mange flere ting du kan gjøre på en vanlig terminal.

screen

Når skjermøkten startet, kan du kjøre en hvilken som helst kommando og holde økten i gang ved å koble fra økten.

Koble fra en skjerm

Akkurat når du vil logge ut av den eksterne sesjonen, men du vil beholde økten du opprettet på den maskinen i live, er det bare det du trenger å gjøre å koble fra skjermen fra terminalen slik at den ikke har noen kontrollerende terminal igjen. Etter å ha gjort dette, kan du trygt logge ut.

For å koble fra en skjerm fra den eksterne terminalen, trykk bare “Ctrl+a ” umiddelbart etterfulgt av “d ” og du kommer tilbake til terminalen og ser meldingen om at skjermen er frittliggende. Nå kan du trygt logge ut og økten din blir stående i live.

Gjenoppta frittstående skjermøkt

Hvis du ønsker å gjenoppta en frakoblet skjermøkt som du forlot før du logget ut, logger du bare på den eksterne terminalen på nytt og skriver inn “screen -r ” i tilfelle bare én skjerm er åpnet, og hvis flere skjermøkter åpnes kjøre “screen -r .

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

For å lære mer om skjermkommando og hvordan du bruker den, følg lenken: Bruk skjermkommando for å administrere Linux-terminaløkter

2. Bruke Tmux (Terminal Multiplexer) for å holde SSH-økter i gang

Tmux er en annen programvare som er laget for å erstatte skjerm. Den har de fleste funksjonene til skjerm, med få tilleggsfunksjoner som gjør den kraftigere enn skjermen.

Den tillater, bortsett fra alle alternativene som tilbys av skjermen, å dele ruter horisontalt eller vertikalt mellom flere vinduer, endre størrelse på vindusruter, overvåking av øktaktivitet, skripting ved hjelp av kommandolinjemodus osv. På grunn av disse funksjonene til tmux, har den blitt tatt i bruk av nesten alle Unix-distribusjoner og til og med det har blitt inkludert i basissystemet til OpenBSD.

Start en Tmux-økt

Etter å ha gjort ssh på den eksterne verten og skrevet tmux, vil du gå inn i en ny økt med et nytt vindu som åpnes foran deg, der du kan gjøre alt du gjør på en vanlig terminal.

tmux

Etter å ha utført operasjonene dine på terminalen, kan du koble den økten fra den kontrollerende terminalen slik at den går i bakgrunnen og du trygt kan logge ut.

Koble Tmux-økten fra terminalen

Enten kan du kjøre “tmux detach ” når du kjører tmux-økt, eller du kan bruke snarveien (Ctrl+b så d). Etter dette vil den nåværende økten bli koblet fra, og du kommer tilbake til terminalen din hvor du kan logge ut trygt.

tmux detach

Gjenoppta den lukkede Tmux-økten

For å gjenåpne økten som du koblet fra og forlot som den var da du logget ut av systemet, logger du bare på den eksterne maskinen på nytt og skriver “tmux attach ” for å koble til den lukkede økten på nytt. vil fortsatt være der og kjøre.

tmux attach

For å lære mer om tmux og hvordan du bruker det, følg lenken: Bruk Tmux Terminal Multiplexer for å administrere flere Linux-terminaler.

3. Bruke nohup-kommandoen for å fortsette å kjøre SSH-økter

Hvis du ikke er så kjent med skjerm eller tmux, kan du bruke nohup og sende langvarig kommando til bakgrunnen slik at du kan fortsette mens kommandoen vil fortsette å kjøre i bakgrunnen. Etter det kan du trygt logge ut.

Med nohup-kommandoen ber vi prosessen ignorere SIGHUP-signalet som sendes av ssh-økten ved avslutning, og dermed får kommandoen til å vedvare selv etter sesjonslogg ut. Ved utlogging av økten fjernes kommandoen fra den kontrollerende terminalen og fortsetter å kjøre i bakgrunnen som en demonprosess.

Utfører kommando ved hjelp av nohup i bakgrunnen

Her er et enkelt scenario der vi har kjørt finn-kommando for å søke etter filer i bakgrunnen på ssh-økt ved hjelp av nohup, hvoretter oppgaven ble sendt til bakgrunnen med spørsmål som umiddelbart returnerte PID og jobb ID for prosessen ([JOBID] PID).

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

Gjenopptar økten for å se om jobben fortsatt kjører

Når du logger på igjen, kan du sjekke statusen til kommandoen, bringe den tilbake til forgrunnen ved å bruke 'fg %JOBID' for å overvåke fremdriften og så videre. Nedenfor viser utgangen at jobben ble fullført da den ikke vises ved re-pålogging, og har gitt utdataene som vises.

fg %JOBID

4. Bruk disown Command for å holde SSH-økter i gang

En annen elegant måte å la kommandoen din eller en enkelt oppgave kjøre i bakgrunnen og forbli i live selv etter økten er logget av eller frakoblet, er å bruke disown.

Disown, fjerner jobben fra prosessjobblisten til systemet, slik at prosessen er skjermet fra å bli drept under øktavbrudd siden den ikke mottar SIGHUP av skallet når du logger ut.

Ulempen med denne metoden er at den kun skal brukes for jobbene som ikke trenger inndata fra stdin og heller ikke trenger å skrive til stdout, med mindre du spesifikt omdirigerer jobber input og output, fordi når jobb vil prøve å samhandle med stdin eller stdout, vil den stoppe.

Utfører kommando ved å bruke disown i bakgrunnen

Nedenfor sendte vi ping-kommandoen til bakgrunnen slik at ut fortsetter å kjøre og blir fjernet fra jobblisten. Som sett ble jobben først suspendert, hvoretter den fortsatt var i jobblisten som Prosess ID: 15368.

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

Etter at avvisningssignalet ble sendt til jobben, og den ble fjernet fra jobblisten, selv om den fortsatt kjørte i bakgrunnen. Jobben vil fortsatt kjøre når du logger deg på den eksterne serveren på nytt som vist nedenfor.

ps -ef | grep ping

5. Bruke setsid-kommandoen for å sette SSH-økter i gang

Et annet verktøy for å oppnå den nødvendige oppførselen er setsid. Nohup har en ulempe i den forstand at prosessgruppen til prosessen forblir den samme, slik at prosessen som kjører med nohup er sårbar for ethvert signal som sendes til hele prosessgruppen (som Ctrl + C).

setsid på den annen side allokerer en ny prosessgruppe til prosessen som utføres, og derfor er prosessen som opprettes helt i en nylig allokert prosessgruppe og kan utføres trygt uten frykt for å bli drept selv etter sesjonslogg ut.

Utfør en hvilken som helst kommando ved å bruke setsid

Her viser den at prosessen ‘sleep 10m’ har blitt løsrevet fra den kontrollerende terminalen siden den ble opprettet.

setsid sleep 10m
ps -ef | grep sleep

Nå, når du logger på økten på nytt, vil du fortsatt finne at denne prosessen kjører.

ps -ef | grep [s]leep

Konklusjon

Hvilke måter du kan tenke deg for å holde prosessen i gang selv etter at du har logget ut fra SSH-økten? Hvis det er noen annen og effektiv måte du kan tenke på, nevne i kommentarene dine.