Comment regarder une fenêtre de terminal à distance?


8

J'ai quitté le bureau plus tôt avec une fenêtre de terminal active exécutant un script sur un serveur Centos 7. Maintenant que je me connecte depuis chez moi et je veux voir où cela en est. Est-ce possible? Puis-je rejoindre la même fenêtre de terminal d'ici?



Je voudrais également ajouter tmate.io à toutes les réponses ci
webKnjaZ

Une option est: strace -e write -p 12345(remplacez le pid du processus qui vous intéresse). Une autre option est: strace -e read -p 12345(remplacez le pid de l'émulateur de terminal). En principe, il serait possible d'écrire un programme pour utiliser l' ptraceappel système pour collecter les informations de la même manière que stracepour les écrire directement sur son propre terminal. Je ne sais pas si un tel programme existe, mais il couvrirait les exigences spécifiées dans votre question.
kasperd

d'une manière possible, activez RPC (appels de procédure à distance) sur l'ordinateur cible, puis vous pouvez (à distance) vous connecter et contrôler l'écran, y compris les fenêtres individuelles. Remarque: cela ouvre une vulnérabilité, assurez-vous donc de désactiver RPC lorsque vous avez terminé.
user3629249

Réponses:


14

Comme l'a mentionné @Sven, la meilleure option est d'utiliser screenou tmux. Ce sont des outils appelés "multiplexeurs terminaux". Ils vous permettent de créer des sessions shell qui peuvent être attachées et non attachées aux connexions réelles. Ces outils ne sont pas seulement utiles pour vérifier votre travail à partir d'un autre terminal, mais ont d'autres fonctionnalités, notamment le partage de votre session avec un autre utilisateur et la garantie que votre commande ne s'arrête pas si vous perdez votre connexion Internet. Si vous recherchez screen, vous pouvez essayer de rechercher "Écran GNU". Ces deux outils sont disponibles sur la plupart des systèmes Linux.

En règle générale, vous démarrez la session, puis exécutez votre commande à l'intérieur de cette session. Cependant, si vous avez déjà démarré la commande, vous souhaiterez peut-être consulter un article sur le déplacement d'une commande en cours d'exécution dans une session d'écran. Cependant, je ne recommanderais pas d'essayer la première fois sur quelque chose d'important. Cette question peut être utile:

Déplacer un processus déjà en cours vers Screen

Si vous voulez seulement vérifier si le processus est en cours d'exécution, mon outil préféré serait strace. Cet outil vous permet de voir chaque appel de noyau effectué par un processus. Il peut falloir des compétences pour comprendre la sortie, mais cela devrait au moins vous donner une idée si le processus est en cours d'exécution, et si vous regardez assez près, il pourrait attraper les noms de fichiers qu'il ouvre. Pour ce faire, commencez par trouver le PID, peut-être en effectuant une recherche ps aux|grep yourcommand, puis:

strace -fp YOUR_PID

Vous pouvez ^ C pour en sortir. Cela peut ne pas vous permettre de vous reconnecter, mais si vous voulez simplement savoir ce qu'il fait, cela devrait être suffisant.


Pourquoi ne vous permettrait-il pas de vous reconnecter?
HSchmale

@HSchmale Je ne suis pas certain de comprendre votre question. Si vous faites référence à strace, ce programme ne vous donne pas du tout de terminal. Il vous montre simplement les appels du noyau en cours. Plusieurs fois, lorsque je soupçonne qu'un processus est bloqué, strace m'a montré les fichiers exacts sur lesquels il travaille en ce moment, donc je sais où il se trouve et qu'il n'est pas bloqué.
DKing

Ce fut une erreur de lecture de ma part, je pensais que vous ne seriez pas en mesure de rattacher Strace, mais vous vouliez y rattacher un terminal.
HSchmale

9

Une façon de le faire: TMUX

Comme la plupart des réponses l'ont déjà souligné - si dans une session SSH existante - vous utilisez tmux(ou screen) avec la commande

tmux

Vous êtes maintenant dans une nouvelle session bash, dans laquelle vous pouvez démarrer votre programme / commande. Vous pouvez le fermer à tout moment (mais pas avec CTRL + D, plutôt en fermant la fenêtre) et y revenir plus tard en établissant une connexion SSH avec le même utilisateur sur la même machine et en écrivant la commande

tmux attach

Vous pouvez également avoir plusieurs tmux sessions en leur donnant des noms avec

tmux new -s myname

Vous pouvez voir une liste de toutes les tmuxsessions ouvertes pour votre utilisateur avec

tmux ls

et attacher à une tmuxsession nommée avec

tmux a -t myname

Trouvez-en un complet tmux cheat sheet ici .

Pour un programme en cours d'exécution

Jusqu'à présent, les réponses semblent ne pas être conscientes du fait que vous pouvez déplacer un processus déjà en cours d'exécution vers un autre tmux/ screencomme le souligne cette réponse . Le programme qui fait le travail est appelé reptyret sous Ubuntu / Debian vous pouvez l'installer avec un simple

sudo apt-get install reptyr

Après cela, recherchez l'ID de processus de votre programme en cours d'exécution (par exemple avec topou htop), démarrez une tmuxsession et un simple

reptyr PID

rattachera le processus en cours à votre tmuxsession bash.


5

À l'avenir, vous pouvez utiliser screenou tmuxet puis rattacher une session en cours d'exécution.


3

J'utilise byobu et je trouve incroyablement puissant. Byobu est un gestionnaire de fenêtres à base de texte open source GPLv3 et un multiplexeur de terminaux.

Vous pouvez donc ouvrir une session byobu en tapant simplement "byobu". Et puis vous pouvez créer un nouvel onglet avec Ctrl + F2, et vous déplacer entre les onglets avec Ctrl + F3 pour l'arrière, Ctrl + F4 pour l'avant. Vous pouvez fermer un onglet avec Ctrl + F6 ou vous détacher d'une session avec Shift + F6. Vous vous reconnectez plus tard à la session en tapant simplement "byobu" à nouveau.

Byobu prend en charge les séparations verticales et horizontales, plein écran entre autres fonctionnalités de fantaisie. Il est disponible sur Ubuntu / Debian, CentOS / Fedora / RedHat et FreeBSD.


Semble un peu trompeur d'appeler byobu un multiplexeur de terminal. C'est vraiment juste un front-end pour tmuxet screenque beaucoup trouvent offre une meilleure expérience utilisateur qu'ils ne le font hors de la boîte.
Couche B

2

Comme cela a déjà été souligné, je recommande d'utiliser tmuxou screenà l'avenir, mais cela ne fonctionne que si vous y avez pensé au préalable.

J'ai été dans votre situation à plusieurs reprises. Si le terminal que vous avez laissé en cours d'exécution était sur votre ordinateur de bureau, vous pouvez SSH dans votre PC et démarrer un serveur VNC. De cette façon, vous pouvez au moins vérifier le terminal ouvert.


0

Comme tout le monde l'a mentionné, tmux peut être utilisé. l'écran n'est pas utile lorsque vous souhaitez partager l'écran avec plusieurs personnes.

Surtout, je recommande à tout le monde d'essayer https://tmate.io/ pour donner un accès temporaire, même à localmachine. tmate prend en charge tout ce qui précède :)

https://tmate.io/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.