Jeg starter automatisk GNU-skærmen, når jeg ssh ind på en på mine egne servere. Når jeg er færdig, skal jeg tage den af. Gå derefter ud for at afslutte ssh. Det betyder, at når jeg ssh ind på serveren igen på et tidspunkt, kan jeg fortsætte, hvor jeg slap.

Kan jeg oprette et alias (for eksempel), der (indenfra skærmen) løsner og slipper ssh?

Kommentarer

  • Hvordan starter du automatisk screen

Svar

Starter screen når du logger ind på den eksterne vært (udført på din lokale maskine):

ssh -t user@host screen 

På skærmen session på den eksterne vært for at løsne og logge ud (hvilket ville afslutte SSH-sessionen, medmindre du bruger en vedvarende forbindelse ved hjælp af et kontrolstik (dvs. bruger indstillingen ControlMaster med ControlPersist i ~/.ssh/config)):

screen -d 

Senere for at logge ind og vedhæft igen:

ssh -t user@host screen -r 

Bemærk, at du skal bruge -t med ssh, der tvinger pseudo-terminalallokering, til at starte screen på denne måde.

Aliaset på den eksterne vært ville være f eller screen -d, måske detach="screen -d" eller noget lignende.

På den lokale vært kan du have en sektion i din ~/.ssh/config fil, der siger

Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname 

Så hver gang du bruger

ssh myhost-screen 

en screen session oprettes (eller tilknyttes igen) på den angivne vært, mens

ssh myhost 

bruger ikke screen.

Bemærk: RemoteCommand blev tilføjet i OpenSSH 7.6 (2017 -10-03).


For tmux:

  • Brug tmux new-session -A -s "%n" i ~/.ssh/config i stedet for screen -d -R.
  • Brug prefix d eller tmux detach-client eller tmux detach for at løsne dem.

Kommentarer

  • Dejligt, thx. Derhjemme fungerer dette godt. Jeg vidste ikke om ' Tving pseudo-tty-tildeling '. Jeg testede dette, og det fungerer.

Svar

Når du udfører din skærmkommando for at hente eller oprette din skærm , Efter tilføjer du en dræb af din forælderskal, så du dræber din ssh-forbindelse.

et eksempel på at dræbe min forældreproces, hvis forælderen er bash

kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " ) 

Kommentarer

  • Thx. Hvis jeg ssh ind fra et sted, hvor jeg ikke kan angive en app, der skal køres (som online ssh app.shellngn.com ), og jeg ændrer din kodelinje til kig efter ssh-sessioner, dette fungerer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *