GNU/Linux >> Znalost Linux >  >> Linux

5 způsobů, jak udržet vzdálené relace a procesy SSH spuštěné po odpojení

SSH nebo Secure Shell jednoduše řečeno je to způsob, kterým může osoba vzdáleně přistupovat k jinému uživateli na jiném systému, ale pouze v příkazovém řádku, tj. v režimu bez GUI. Technickěji řečeno, když ssh přejdeme na jiného uživatele na nějakém jiném systému a spustíme příkazy na tomto počítači, ve skutečnosti vytvoří pseudoterminál a připojí ho k přihlašovacímu shellu přihlášeného uživatele.

Když se odhlásíme z relace nebo časový limit relace po delší době nečinnosti vyprší, zobrazí se SIGHUP signál je odeslán do pseudoterminálu a všechny úlohy, které byly spuštěny na tomto terminálu, dokonce i úlohy, jejichž nadřazené úlohy byly iniciovány na pseudoterminálu, jsou také odeslány signál SIGHUP a jsou nuceny ukončit.

Ne t Miss: 5 užitečných postupů pro zajištění bezpečnosti a ochrany serveru SSH

Ukončení relace přežijí pouze úlohy, které byly nakonfigurovány tak, aby tento signál ignorovaly. Na systémech Linux můžeme mít mnoho způsobů, jak tyto úlohy spustit na vzdáleném serveru nebo libovolném počítači i po odhlášení uživatele a ukončení relace.

Pochopte procesy v systému Linux

Normální proces

Normální procesy jsou ty, které mají životnost relace. Spouštějí se během relace jako procesy v popředí a končí v určitém časovém rozpětí nebo když je relace odhlášena. Tyto procesy mají svého vlastníka jako kterýkoli platný uživatel systému, včetně root.

Ojedinělý proces

Osiřelé procesy jsou ty, které měly původně nadřazeného procesu, který vytvořil proces, ale po nějaké době nadřazený proces neúmyslně zemřel nebo selhal, takže se stal nadřazeným procesem. Takové procesy mají init jako svého bezprostředního rodiče, který na tyto procesy čeká, dokud nezemřou nebo neskončí.

Démonský proces

Jedná se o některé záměrně osiřelé procesy, takové procesy, které jsou záměrně ponechány spuštěné v systému, se nazývají démony nebo záměrně osiřelé procesy. Obvykle se jedná o dlouhotrvající procesy, které jsou jednou spuštěny a poté odpojeny od jakéhokoli řídicího terminálu, takže mohou běžet na pozadí, dokud nejsou dokončeny, nebo skončí vyvoláním chyby. Rodič takových procesů úmyslně zemře, takže dítě bude spouštěno na pozadí.

Techniky, jak udržet relaci SSH spuštěnou po odpojení

Existují různé způsoby, jak nechat relace ssh spuštěné po odpojení, jak je popsáno níže:

1. Použití příkazu obrazovky k udržení relací SSH v chodu

obrazovka je textový správce oken pro Linux, který umožňuje uživateli spravovat více relací terminálu současně, přepínat mezi relacemi, protokolovat relace pro běžící relace na obrazovce a dokonce obnovit relaci kdykoli si přejeme, aniž by se museli starat o odhlášení relace nebo je terminál uzavřen.

relace obrazovky lze spustit a poté odpojit od řídicího terminálu a nechat je běžet na pozadí a poté je kdykoli a dokonce na jakémkoli místě obnovit. Stačí spustit relaci na obrazovce a až budete chtít, odpojit ji od pseudoterminálu (nebo řídícího terminálu) a odhlásit se. Až budete mít pocit, můžete se znovu přihlásit a pokračovat v relaci.

Zahájení relace obrazovky

Po zadání „screen“ příkazem, budete v nové relaci obrazovky, v rámci této relace můžete vytvářet nová okna, procházet mezi okny, zamykat obrazovku a dělat mnoho dalších věcí, které můžete dělat na normálním terminálu.

$ screen

Po zahájení relace obrazovky můžete spustit libovolný příkaz a nechat relaci spuštěnou odpojením relace.

Odpojení obrazovky

Když se chcete odhlásit ze vzdálené relace, ale chcete zachovat relaci, kterou jste vytvořili na tomto počítači, stačí odpojit obrazovku od terminálu, aby na něm nezbyl žádný ovládací terminál. Poté se můžete bezpečně odhlásit.

Chcete-li odpojit obrazovku od vzdáleného terminálu, stačí stisknout “Ctrl+a” bezprostředně následované “d” a vy se vrátíte k terminálu a uvidíte zprávu, že obrazovka je odpojena. Nyní se můžete bezpečně odhlásit a vaše relace zůstane naživu.

Obnovení oddělené relace obrazovky

Pokud chcete obnovit relaci oddělené obrazovky, kterou jste opustili před odhlášením, jednoduše se znovu přihlaste ke vzdálenému terminálu a zadejte “screen -r” v případě, že je otevřena pouze jedna obrazovka a pokud je otevřeno více relací obrazovky, spusťte “screen -r <pid.tty.host>” .

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

Chcete-li se dozvědět více o příkazu obrazovky a jak jej používat, stačí kliknout na odkaz:Pomocí příkazu obrazovky ke správě relací terminálu Linux

2. Použití Tmux (Multiplexer terminálu) k udržení relací SSH v chodu

Tmux je další software, který je vytvořen jako náhrada za obrazovku . Má většinu možností obrazovky , s několika dalšími funkcemi, díky nimž je výkonnější než obrazovka.

Umožňuje, kromě všech možností, které nabízí obrazovka, rozdělení panelů vodorovně nebo svisle mezi více oken, změnu velikosti okenních panelů, sledování aktivity relace, skriptování pomocí režimu příkazového řádku atd. Díky těmto funkcím tmux se těší širokému přijetí téměř všechny unixové distribuce a dokonce i to bylo zahrnuto do základního systému OpenBSD.

Zahájit relaci Tmux

Po provedení ssh na vzdáleném hostiteli a zadání tmux , vstoupíte do nové relace s novým oknem, které se před vámi otevře, ve kterém můžete dělat cokoli, co děláte na normálním terminálu.

$ tmux

Po provedení operací na terminálu můžete tuto relaci odpojit od řídicího terminálu, aby přešla na pozadí a vy se můžete bezpečně odhlásit.

Odpojit relaci Tmux od terminálu

Buď můžete spustit “tmux detach” při spuštění relace tmux nebo můžete použít zkratku (Ctrl+b then d) . Poté bude vaše aktuální relace odpojena a vrátíte se zpět do svého terminálu, odkud se můžete bezpečně odhlásit.

$ tmux detach
Obnovení uzavřené relace Tmux

Chcete-li znovu otevřít relaci, kterou jste odpojili a nechali tak, jak je, když jste se odhlásili ze systému, stačí se znovu přihlásit ke vzdálenému počítači a napsat “tmux attachment“ znovu připojit k uzavřené relaci a bude tam stále a běží.

$ tmux attach

Chcete-li se dozvědět více o tmux a jak jej používat, klikněte na odkaz:Použijte Tmux Terminal Multiplexer ke správě více linuxových terminálů.

3. Použití příkazu nohup k udržení relací SSH

Pokud nejste obeznámeni s obrazovkou nebo tmux , můžete použít nohup a odešlete svůj dlouho běžící příkaz na pozadí, abyste mohli pokračovat, zatímco příkaz bude pokračovat v provádění na pozadí. Poté se můžete bezpečně odhlásit.

Příkazem nohup říkáme procesu, aby ignoroval SIGHUP signál, který odešle ssh relace při ukončení, takže příkaz přetrvává i po odhlášení relace. Při odhlášení relace je příkaz odstraněn z řídicího terminálu a běží na pozadí jako proces démona.

Provádění příkazu pomocí nohup na pozadí

Zde je jednoduchý scénář, ve kterém jsme spustili příkaz find k vyhledání souborů na pozadí v relaci ssh pomocí nohyp, načež byla úloha odeslána na pozadí s okamžitou návratností PID a ID úlohy procesu ([JOBID] PID) .

# nohup find / -type f $gt; files_in_system.out 2>1 &
Obnovení relace za účelem zobrazení, zda úloha stále běží

Když se znovu přihlásíte, můžete zkontrolovat stav příkazu a vrátit jej zpět do popředí pomocí 'fg %JOBID' sledovat jeho průběh a podobně. Níže výstup ukazuje, že úloha byla dokončena, protože se nezobrazuje při opětovném přihlášení, a poskytl výstup, který je zobrazen.

# fg %JOBID

4. Použití příkazu disown k udržení relací SSH v chodu

Dalším elegantním způsobem, jak nechat svůj příkaz nebo jednu úlohu běžet na pozadí a zůstat naživu i po odhlášení nebo odpojení relace, je použití disown .

Odmítnout , odebere úlohu ze seznamu úloh procesu v systému, takže proces je chráněn před zabitím během odpojení relace, protože neobdrží SIGHUP pomocí shellu, když se odhlásíte.

Nevýhodou této metody je, že by se měla používat pouze pro úlohy, které nepotřebují žádný vstup z stdin a ani nemusíte zapisovat do stdout , pokud konkrétně nepřesměrujete vstup a výstup úloh, protože když se úloha pokusí interagovat s stdin nebo stdout , zastaví se.

Provádění příkazu pomocí disown na pozadí

Níže jsme odeslali ping příkaz na pozadí, aby ut stále běžel a byl odstraněn ze seznamu úloh. Jak je vidět, úloha byla nejprve pozastavena, poté byla stále v seznamu úloh jako ID procesu:15368 .

$ ping tecmint.com > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping

Poté byl do úlohy předán signál odmítnutí a ta byla odstraněna ze seznamu úloh, ačkoli stále běžela na pozadí. Úloha bude stále spuštěna, když se znovu přihlásíte ke vzdálenému serveru, jak je vidět níže.

$ ps -ef | grep ping

5. Použití příkazu setsid ke spuštění relací SSH

Další nástroj pro dosažení požadovaného chování je setsid . Nohup má nevýhodu v tom, že skupina procesů procesu zůstává stejná, takže proces běžící s nohup je zranitelný vůči jakémukoli signálu odeslanému do celé skupiny procesů (jako Ctrl + C ).

setsid na druhé straně přiděluje novou skupinu procesů právě prováděnému procesu, a proto je vytvořený proces zcela v nově přidělené skupině procesů a může se bezpečně provádět bez obav, že bude zabit i po odhlášení z relace.

Proveďte libovolný příkaz pomocí setsid

Zde se ukazuje, že proces ‘sleep 10m’ byl odpojen od řídicího terminálu od doby, kdy byl vytvořen.

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

Nyní, když se znovu přihlásíte do relace, bude tento proces stále spuštěn.

$ ps -ef | grep [s]leep

Závěr

Jaké způsoby byste mohli vymyslet, jak udržet váš proces v chodu i po odhlášení z relace SSH? Pokud vás napadá nějaký jiný a účinný způsob, zmiňte to ve svých komentářích.


Linux
  1. Jak zobrazit běžící procesy libovolného uživatele v SSH?

  2. Jak vypsat spuštěné relace obrazovky?

  3. automaticky spustí obrazovku po přihlášení ssh

  1. Ssh – Jak zrušit běžící proces a přiřadit jej k novému prostředí obrazovky?

  2. Ssh – Jak vytvořit proces, který zahájím během relace Ssh, která běží po skončení relace?

  3. Obsluha Ctrl-c v relaci Ssh?

  1. Ponechat program Python i po odhlášení z relace Ssh?

  2. Najděte 10 nejběžnějších procesů podle využití paměti a CPU

  3. Jak udržet relace SSH naživu