Weboldal keresés

5 módszer a távoli SSH-munkamenetek és -folyamatok futásban tartására a kapcsolat megszakítása után


Az SSH vagy a Secure Shell egyszerű kifejezéssel egy olyan mód, amellyel egy személy távolról hozzáférhet egy másik felhasználóhoz egy másik rendszeren, de csak parancssorban, azaz nem GUI módban. Technikailag szólva, amikor egy másik rendszeren lévő másik felhasználóhoz ssh-t küldünk, és parancsokat futtatunk azon a gépen, az valójában létrehoz egy pszeudoterminált, és csatolja a bejelentkezett felhasználó bejelentkezési shelljéhez.

Amikor kijelentkezünk a munkamenetből, vagy a munkamenet időtúllépés után hosszabb tétlenség után a SIGHUP jelet küldi a pszeudoterminálnak és az azon a terminálon futtatott összes jobnak, még akkor is, ha azok a jobok, amelyek szülőjobjait a pszeudoterminálon kezdeményezték, szintén elküldik a SIGHUP jelet, és kénytelenek leállni.

Ne hagyja ki: 5 hasznos gyakorlat az SSH-kiszolgáló biztonságának és védelmének megőrzéséhez

Csak a jelzés figyelmen kívül hagyására konfigurált jobok élik túl a munkamenet-lezárást. Linux rendszereken sokféleképpen futtathatjuk ezeket a jobokat a távoli szerveren vagy bármely gépen, még a felhasználói kijelentkezés és a munkamenet befejezése után is.

A folyamatok megértése Linuxon

Normál folyamat

A normál folyamatok azok, amelyeknek egy munkamenet élettartama van. A munkamenet során indulnak el előtérbeli folyamatként, és bizonyos időintervallumban vagy a munkamenet kijelentkezésekor érnek véget. Ezeknek a folyamatoknak a tulajdonosa a rendszer bármely érvényes felhasználója, beleértve a root felhasználót is.

Árva folyamat

Az árva folyamatok azok, amelyeknek eredetileg szülője volt, amely létrehozta a folyamatot, de egy idő után a szülőfolyamat akaratlanul meghalt vagy összeomlott, így az init lett a folyamat szülője. Az ilyen folyamatoknak az init a közvetlen szülőjük, amely addig vár ezekre a folyamatokra, amíg el nem halnak vagy véget érnek.

Daemon folyamat

Ezek néhány szándékosan árva folyamatok, az olyan folyamatokat, amelyeket szándékosan hagynak futni a rendszeren, démonoknak vagy szándékosan árva folyamatoknak nevezzük. Ezek általában hosszan tartó folyamatok, amelyeket egyszer elindítanak, majd leválasztanak bármely vezérlő terminálról, így a háttérben futhatnak mindaddig, amíg be nem fejeződnek, vagy a végén hibát dobnak ki. Az ilyen folyamatok szülője szándékosan meghal, és a háttérben végrehajtja a gyereket.

Technikák az SSH-munkamenet futásban tartásához a kapcsolat megszakítása után

Az ssh-munkamenetek leválasztása után különféle módokon hagyhatók futásban, az alábbiak szerint:

1. A képernyőparancs használata az SSH-munkamenetek futtatásához

A képernyő egy szöveges Window Manager for Linux, amely lehetővé teszi a felhasználó számára, hogy egyszerre több terminálmunkamenetet kezeljen, váltson a munkamenetek között, naplózza a képernyőn futó munkameneteket, és bármikor újraindítsa a munkamenetet. anélkül, hogy aggódnia kellene a munkamenet kijelentkezése vagy a terminál bezárása miatt.

A képernyő-munkamenetek elindíthatók, majd leválaszthatók a vezérlő terminálról, hagyva, hogy a háttérben futjanak, majd bármikor és akár bárhol is folytathatók. Csak el kell indítania a munkamenetet a képernyőn, és amikor akarja, válassza le a pszeudoterminálról (vagy a vezérlő terminálról) és jelentkezzen ki. Ha úgy érzi, újra bejelentkezhet, és folytathatja a munkamenetet.

Képernyő-munkamenet indítása

A 'screen' parancs beírása után új képernyő-munkamenetbe kerül, ezen a munkameneten belül új ablakokat hozhat létre, áthaladhat az ablakok között, lezárhatja a képernyőt, és sok más műveletet hajthat végre egy normál terminál.

screen

A képernyő-munkamenet elindítása után bármelyik parancsot futtathatja, és a munkamenet leválasztásával futva tarthatja a munkamenetet.

Képernyő leválasztása

Amikor ki szeretne jelentkezni a távoli munkamenetből, de életben szeretné tartani az adott gépen létrehozott munkamenetet, akkor csak annyit kell tennie, hogy le kell választania a képernyőt a terminálról, hogy ne maradjon vezérlő terminál. Ezt követően biztonságosan kijelentkezhet.

Ha le szeretne választani egy képernyőt a távoli terminálról, csak nyomja meg a „Ctrl+a ” gombot, majd közvetlenül a “d ” billentyűt, és visszatér a terminálhoz, és megjelenik az üzenet, hogy a Képernyő le van választva. Most már biztonságosan kijelentkezhet, és a munkamenet életben marad.

Leválasztott képernyő-munkamenet folytatása

Ha egy leválasztott képernyő-munkamenetet szeretne folytatni, amelyet a kijelentkezés előtt hagyott el, csak jelentkezzen be újra a távoli terminálba, és írja be a „screen -r ” parancsot arra az esetre, ha csak egy képernyő van nyitva, és ha több képernyő szekciók megnyitva futtassa a “screen -r parancsot.

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

Ha többet szeretne megtudni a képernyőparancsról és használatáról, kövesse a következő hivatkozást: A képernyőparancs használata Linux terminálmunkamenetek kezelésére

2. A Tmux (Terminal Multiplexer) használata az SSH-munkamenetek futásában

A Tmux egy másik szoftver, amely a képernyő helyettesítésére készült. A képernyő funkcióinak többségével rendelkezik, néhány további képességgel, amelyek erősebbé teszik a képernyőnél.

A képernyő által kínált összes lehetőség mellett lehetővé teszi az ablaktáblák vízszintes vagy függőleges felosztását több ablak között, az ablaktáblák átméretezését, a munkamenet-tevékenység figyelését, a parancssori mód használatával történő szkriptezést stb. A tmux ezen funkcióinak köszönhetően széles körben alkalmazzák az összes Unix disztribúció, sőt az OpenBSD alaprendszerébe is bekerült.

Indítson el egy Tmux munkamenetet

Miután elvégezte az ssh parancsot a távoli gazdagépen, és beírta a tmux parancsot, új munkamenetbe lép, ahol egy új ablak nyílik meg, ahol bármit megtehet, amit egy normál terminálon.

tmux

Miután elvégezte a műveleteket a terminálon, leválaszthatja azt a munkamenetet a vezérlő terminálról, így háttérbe kerül, és biztonságosan kijelentkezhet.

Válassza le a Tmux munkamenetet a terminálról

Vagy futtathatja a “tmux detach ” parancsot a futó tmux munkameneten, vagy használhatja a (Ctrl+b, majd d) parancsikont. Ezt követően az aktuális munkamenetet leválasztjuk, és Ön visszatér a termináljához, ahonnan biztonságosan kijelentkezhet.

tmux detach

A zárt Tmux munkamenet folytatása

A leválasztott és a rendszerből való kijelentkezéskor elhagyott munkamenet újbóli megnyitásához jelentkezzen be újra a távoli gépre, és írja be a „tmux attach” parancsot, hogy újra csatlakozzon a zárt munkamenethez, és továbbra is ott lesz és fut.

tmux attach

Ha többet szeretne megtudni a tmuxról és használatáról, kövesse a következő hivatkozást: A Tmux Terminal Multiplexer használata több Linux terminál kezeléséhez.

3. Használja a nohup parancsot az SSH-munkamenetek futtatásának folytatásához

Ha nem ismeri annyira a képernyőt vagy a tmuxot, használhatja a nohup parancsot, és elküldheti a régóta futó parancsot a háttérbe, hogy folytathassa. a parancs a háttérben fut tovább. Ezt követően nyugodtan kijelentkezhet.

A nohup paranccsal azt mondjuk a folyamatnak, hogy figyelmen kívül hagyja a SIGHUP jelet, amelyet az ssh-munkamenet küld a befejezéskor, így a parancs a munkamenet kijelentkezése után is fennmarad. A munkamenet kijelentkezéskor a parancs leválik a vezérlő terminálról, és a háttérben démonfolyamatként fut tovább.

Parancs végrehajtása a nohup használatával a háttérben

Íme egy egyszerű forgatókönyv, amelyben a find parancsot futtattuk, hogy a háttérben fájlokat keressünk az ssh-munkamenetben a nohup használatával, majd a feladat elküldésre került a háttérbe, azonnali visszaküldéssel a PID és a job megadásával. >A folyamat azonosítója ([JOBID] PID).

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

A munkamenet folytatása annak megtekintéséhez, hogy a munka még fut-e

Amikor újra bejelentkezik, ellenőrizheti a parancs állapotát, visszahozhatja az előtérbe az 'fg %JOBID' segítségével, hogy figyelemmel kísérhesse a parancs előrehaladását, és így tovább. Az alábbiakban a kimenet azt mutatja, hogy a feladat befejeződött, mivel nem jelenik meg újra bejelentkezéskor, és megadta a megjelenített kimenetet.

fg %JOBID

4. A disown parancs használata az SSH-munkamenetek futtatásához

Egy másik elegáns módja annak, hogy parancsa vagy egyetlen feladat a háttérben futhasson, és életben maradjon a munkamenet kijelentkezése vagy leválasztása után is, a disown használatával.

Az Elutasítás: eltávolítja a feladatot a rendszer folyamatfeladatlistájáról, így a folyamat védve van attól, hogy a munkamenet leválasztása során leálljon, mivel nem kapja meg a SIGHUP üzenetet a rendszerhéjtól, amikor kijelentkezel.

Ennek a módszernek az a hátránya, hogy csak azokhoz a jobokhoz kell használni, amelyekhez nincs szükség az stdin bemenetére, és nem kell az stdoutba írni, hacsak nem irányítja át kifejezetten jobs bemenet és kimenet, mert amikor a job megpróbál kölcsönhatásba lépni az stdin vagy az stdout szolgáltatással, leáll.

Parancs végrehajtása disown használatával a háttérben

Az alábbiakban elküldtük a ping parancsot a háttérnek, így az ut továbbra is fut, és eltávolítja a munkalistáról. Amint látható, a munkát először felfüggesztették, majd továbbra is a munkalistán szerepelt Folyamatazonosító: 15368 néven.

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

Ezt követően a megtagadási jelzést átadták a munkának, és eltávolították a munkalistáról, bár még mindig a háttérben futott. A feladat továbbra is futni fog, amikor újra bejelentkezik a távoli kiszolgálóra az alábbiak szerint.

ps -ef | grep ping

5. A setsid parancs használata az SSH-munkamenetek futtatásához

Egy másik segédprogram a kívánt viselkedés eléréséhez a setsid. A Nohup hátránya abban az értelemben, hogy a folyamat folyamatcsoportja ugyanaz marad, így a nohup-pal futó folyamat sebezhető a teljes folyamatcsoportnak küldött jelekkel szemben (például Ctrl + C<). /kód>).

A setsid viszont egy új folyamatcsoportot rendel a végrehajtott folyamathoz, így a létrehozott folyamat teljesen egy újonnan lefoglalt folyamatcsoportban van, és biztonságosan végrehajtható anélkül, hogy félne attól, hogy megöli, még a munkamenet kijelentkezése után is.

Futtassa le bármelyik parancsot a setsid használatával

Itt látható, hogy a 'sleep 10m' folyamat a létrehozása óta le van választva a vezérlő terminálról.

setsid sleep 10m
ps -ef | grep sleep

Most, amikor újra bejelentkezik a munkamenetbe, továbbra is futni fog ez a folyamat.

ps -ef | grep [s]leep

Következtetés

Milyen módszereket gondolhatna arra, hogy az SSH-munkamenetből való kijelentkezés után is fusson a folyamat? Ha van más és hatékony módszer, amire gondol, jelezze megjegyzéseiben.