Ik start automatisch GNU-scherm wanneer ik naar een scherm op mijn eigen servers ssh. Als ik klaar ben, moet ik me losmaken. Verlaat dan om ssh te verlaten. Dit betekent dat wanneer ik op een bepaald moment weer naar de server ssh, ik verder kan waar ik was gebleven.

Kan ik (bijvoorbeeld) een alias maken die (vanuit het scherm) ssh loskoppelt en neerzet?

Reacties

  • Hoe start je automatisch screen

Antwoord

Start screen bij het inloggen op de externe host (uitgevoerd op uw lokale computer):

ssh -t user@host screen 

In het scherm sessie, op de externe host, om los te koppelen en uit te loggen (wat de SSH-sessie zou beëindigen, tenzij u een permanente verbinding gebruikt met behulp van een control-socket (dwz door de ControlMaster -instelling met ControlPersist in ~/.ssh/config))):

screen -d 

Later, om in te loggen en voeg opnieuw toe:

ssh -t user@host screen -r 

Merk op dat u -t moet gebruiken met ssh, waardoor pseudo-terminal toewijzing wordt gedwongen, screen op deze manier te starten.

De alias op de externe host zou f of screen -d, misschien detach="screen -d" of iets dergelijks.

Op de lokale host zou je een sectie in je ~/.ssh/config bestand met de tekst

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

Vervolgens, wanneer je

ssh myhost-screen 

een screen sessie zou worden aangemaakt (of opnieuw gekoppeld aan) op de opgegeven host, terwijl

ssh myhost 

zou screen niet gebruiken.

Opmerking: RemoteCommand is toegevoegd in OpenSSH 7.6 (2017 -10-03).


Voor tmux:

  • Gebruik tmux new-session -A -s "%n" in ~/.ssh/config in plaats van screen -d -R.
  • Gebruik prefix d of tmux detach-client of tmux detach om los te koppelen.

Reacties

  • Leuk, thx. Thuis werkt dit prima. Ik wist niets over ' Forceer pseudo-tty-toewijzing '. Ik heb dit getest en het werkt.

Antwoord

Wanneer u uw schermopdracht uitvoert om uw scherm op te roepen of te maken , Na voeg je een kill van je parent shell toe, dus je zal je SSH-verbinding verbreken.

een voorbeeld om mijn ouderproces te beëindigen als de ouder bash is

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

Reacties

  • Thx. Als ik ergens in kom waar ik geen app kan specificeren die moet worden uitgevoerd (zoals online ssh app.shellngn.com ), en ik wijzig je coderegel in zoek naar SSH-sessies, dit zal werken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *