Je démarre automatiquement lécran gnu lorsque je ssh dans un sur mes propres serveurs. Quand jai fini, je dois me détacher. Puis quittez pour quitter ssh. Cela signifie que lorsque je ssh dans le serveur à un moment donné, je peux continuer là où je métais arrêté.
Puis-je créer un alias (par exemple) qui (à partir de lécran) détachera et supprimera ssh?
Commentaires
Réponse
Démarrage de screen
lors de la connexion sur lhôte distant (exécuté sur votre machine locale):
ssh -t user@host screen
Dans lécran session, sur lhôte distant, pour se détacher et se déconnecter (ce qui mettrait fin à la session SSH à moins que vous nutilisiez une connexion persistante à laide dun socket de contrôle (cest-à-dire en utilisant le paramètre ControlMaster
avec ControlPersist
dans ~/.ssh/config
)):
screen -d
Plus tard, pour vous connecter et rattachez:
ssh -t user@host screen -r
Notez que vous devez utiliser -t
avec ssh
, forçant lallocation de pseudo-terminal, à démarrer screen
de cette manière.
Lalias sur lhôte distant serait f ou screen -d
, peut-être detach="screen -d"
ou quelque chose de similaire.
Sur lhôte local, vous pourriez avoir une section dans votre ~/.ssh/config
fichier disant
Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname
Ensuite, chaque fois que vous utilisez
ssh myhost-screen
une session screen
serait créée (ou rattachée à) sur lhôte spécifié, tandis que
ssh myhost
nutiliserait pas screen
.
Remarque: RemoteCommand
a été ajouté dans OpenSSH 7.6 (2017 -10-03).
Pour tmux
:
- Utilisez
tmux new-session -A -s "%n"
dans~/.ssh/config
au lieu descreen -d -R
. - Utilisez prefix d ou
tmux detach-client
outmux detach
pour détacher.
Commentaires
- Sympa, merci. À la maison, cela fonctionnera très bien. Je ne connaissais pas ' Forcer lallocation de pseudo-tty '. Jai testé cela et cela fonctionne.
Réponse
Lorsque vous exécutez votre commande décran pour rappeler ou créer votre écran , Après vous ajoutez un kill de votre shell parent, vous allez donc tuer votre connexion ssh.
un exemple pour tuer mon processus parent si le parent est bash
kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " )
Commentaires
- Thx. Si je ssh depuis un endroit où je ne peux pas spécifier une application à exécuter (comme ssh en ligne app.shellngn.com ), et je modifie votre ligne de code en recherchez des sessions ssh, cela fonctionnera.
screen