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
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 vanscreen -d -R
. - Gebruik prefix d of
tmux detach-client
oftmux 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.
screen