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

  • Hur startar du automatiskt screen

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ör screen -d -R.
  • Använd prefix d eller tmux detach-client eller tmux 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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *