Jag startar automatiskt gnu-skärmen när jag ssh till en på mina egna servrar. När jag är klar måste jag d för att lossna. Avsluta sedan för att avsluta ssh. Det betyder att när jag ssh in på servern igen någon gång i tiden kan jag fortsätta där jag slutade.
Kan jag skapa ett alias (till exempel) som (från skärmen) tar bort och släpper ssh?
Kommentarer
Svar
Startar screen
när du loggar in på fjärrvärden (körs på din lokala maskin):
ssh -t user@host screen
På skärmen session, på fjärrvärden, för att koppla bort och logga ut (vilket skulle avsluta SSH-sessionen om du inte använder en beständig anslutning med ett kontrolluttag (dvs. använder inställningen ControlMaster
med ControlPersist
i ~/.ssh/config
)):
screen -d
Senare, för att logga in och bifoga igen:
ssh -t user@host screen -r
Observera att du måste använda -t
med ssh
, tvingar pseudoterminalallokering, att starta screen
på detta sätt.
Aliaset på fjärrvärden skulle vara f eller screen -d
, kanske detach="screen -d"
eller något liknande.
På den lokala värden kan du ha ett avsnitt i din ~/.ssh/config
fil som säger
Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname
Sedan, när du använder
ssh myhost-screen
en screen
-session skulle skapas (eller bifogas på nytt) på den angivna värden, medan
ssh myhost
skulle inte använda screen
.
Obs: RemoteCommand
lades till i OpenSSH 7.6 (2017 -10-03).
För tmux
:
- Använd
tmux new-session -A -s "%n"
i~/.ssh/config
istället förscreen -d -R
. - Använd prefix d eller
tmux detach-client
ellertmux detach
för att lossa.
Kommentarer
- Trevligt, thx. Hemma kommer detta att fungera bra. Jag visste inte om ' Tvinga pseudo-tty-allokering '. Jag testade detta och det fungerar.
Svar
När du kör ditt skärmkommando för att återkalla eller skapa din skärm , Efter lägger du till ett dödande av ditt förälderskal så att du dödar din ssh-anslutning.
ett exempel för att döda min föräldraprocess om föräldern är bash
kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " )
Kommentarer
- Thx. Om jag ssh in från någonstans där jag inte kan ange en app som ska köras (som online ssh app.shellngn.com ), och jag ändrar din kodrad till leta efter ssh-sessioner, det fungerar.
screen