Come posso guardare una finestra del terminale da remoto?


8

Prima avevo lasciato l'ufficio con una finestra di terminale attiva che eseguiva uno script su un server Centos 7. Ora ho SSHing da casa e voglio vedere dove deve arrivare. È possibile? Posso rientrare nella stessa finestra del terminale da qui?



Vorrei anche aggiungere tmate.io a tutte le risposte di seguito
webKnjaZ

Un'opzione è: strace -e write -p 12345(sostituisci il pid del processo che ti interessa). Un'altra opzione è: strace -e read -p 12345(sostituisce il pid dell'emulatore terminale). In linea di principio sarebbe possibile scrivere un programma per utilizzare la ptracechiamata di sistema per raccogliere le informazioni nello stesso modo in cui lo stracefanno e scriverle direttamente sul proprio terminale. Non so se esiste un tale programma, ma coprirebbe i requisiti specificati nella tua domanda.
Kasperd,

in un modo possibile, abilitare RPC (chiamate di procedura remota) sul computer di destinazione, quindi è possibile (in remoto) connettersi e controllare lo schermo, comprese le singole finestre. Nota: questo apre una vulnerabilità, quindi assicurati di disabilitare RPC al termine.
user3629249,

Risposte:


14

Come accennato da @Sven, l'opzione migliore è usare screeno tmux. Questi sono strumenti noti come "multiplexer terminali". Consentono di creare sessioni di shell che possono essere collegate e scollegate dagli accessi effettivi. Questi strumenti non sono utili solo per controllare il tuo lavoro da un altro terminale, ma hanno altre funzionalità, tra cui la condivisione della sessione con un altro utente e la garanzia che il comando non si interrompa se perdi la connessione a Internet. Se stai cercando screen, potresti provare a cercare "GNU Screen". Entrambi questi strumenti sono disponibili sulla maggior parte dei sistemi Linux.

In genere, si avvia la sessione e quindi si esegue il comando all'interno di quella sessione. Tuttavia, se il comando è già stato avviato, è possibile consultare un articolo sullo spostamento di un comando in esecuzione in una sessione dello schermo. Tuttavia, non consiglierei di provarlo per la prima volta su qualcosa di importante. Questa domanda può essere di qualche utilità:

Spostamento di un processo già in esecuzione sullo schermo

Se vuoi solo verificare se il processo è in esecuzione, il mio strumento preferito sarebbe la strace. Questo strumento consente di vedere ogni chiamata del kernel effettuata da un processo. Può essere necessaria una certa abilità per capire l'output, ma dovrebbe almeno darti un'idea se il processo è in esecuzione e, se lo guardi abbastanza da vicino, potrebbe catturare i nomi dei file che si stanno aprendo. Per farlo, prima trova il PID, magari cercando attraverso ps aux|grep yourcommand, e poi:

strace -fp YOUR_PID

Puoi ^ C per uscirne. Potrebbe non permetterti di ricollegarti, ma se vuoi solo sapere cosa sta facendo, dovrebbe essere sufficiente.


Perché non ti permetterebbe di ricollegarti?
HSchmale,

@HSchmale Non sono sicuro di aver capito la tua domanda. Se ti riferisci a strace, quel programma non ti dà affatto un terminale. Ti mostra solo le chiamate del kernel effettuate. Molte volte, quando sospetto che un processo sia bloccato, strace mi ha mostrato i file esatti su cui sta lavorando in questo momento, quindi so dove si trova e che non è bloccato.
DKing,

Per me è stato un errore di lettura. Pensavo che non saresti stato in grado di riattaccare lo strace ad esso, ma volevi dire ricollegare un terminale ad esso.
HSchmale,

9

Un modo per farlo: TMUX

Come già indicato dalla maggior parte delle risposte - se in una sessione SSH esistente - si utilizza tmux(o screen) con il comando

tmux

Ora sei in una nuova sessione bash, in cui puoi avviare il tuo programma / comando. Puoi chiuderlo in qualsiasi momento (ma non con CTRL + D, piuttosto chiudendo la finestra) e tornare ad esso successivamente costruendo una connessione SSH allo stesso utente sullo stesso computer e scrivendo il comando

tmux attach

Puoi anche avere più tmux sessioni assegnando loro nomi

tmux new -s myname

Puoi vedere un elenco di tutte le tmuxsessioni aperte per il tuo utente con

tmux ls

e allegare a una tmuxsessione denominata con

tmux a -t myname

Trova un completo tmux cheat sheet qui .

Per un programma in esecuzione

Le risposte finora non sembrano essere consapevoli del fatto che è possibile spostare un processo già in esecuzione in un altro tmux/ screencome sottolinea questa risposta . Il programma che fa il lavoro si chiama reptyre sotto Ubuntu / Debian è possibile installarlo con un semplice

sudo apt-get install reptyr

Successivamente, scopri l'ID processo del tuo programma in esecuzione (ad esempio con topo htop), avvia una tmuxsessione e una semplice

reptyr PID

ricollegherà il processo in esecuzione alla tmuxsessione bash.


5

In futuro, è possibile utilizzare screeno tmuxe quindi ricollegare una sessione in esecuzione.


3

Sto usando Byobu e lo trovo incredibilmente potente. Byobu è un gestore di finestre e multiplexer di terminale basato su testo open source GPLv3.

Quindi puoi aprire una sessione byobu semplicemente digitando "byobu". Quindi puoi creare una nuova scheda con Ctrl + F2 e spostarti tra le schede con Ctrl + F3 per il retro, Ctrl + F4 per il forward. Puoi chiudere una scheda con Ctrl + F6 o staccare da una sessione con Maiusc + F6. Successivamente ti riconnetti alla sessione semplicemente digitando nuovamente "byobu".

Byobu supporta divisioni verticali e orizzontali, a schermo intero tra le altre fantasiose funzionalità. È disponibile su Ubuntu / Debian, CentOS / Fedora / RedHat e FreeBSD.


Sembra un po 'fuorviante chiamare byobu un terminale multiplexer. È davvero solo un front-end per tmuxe screenche molti trovano un'esperienza utente migliore di quanto facciano fuori dalla scatola.
B Layer

2

Come è già stato sottolineato, ti consiglio di utilizzare tmuxo screenin futuro, ma funziona solo se ci hai pensato in anticipo.

Sono stato nella tua situazione parecchie volte. Se il terminale che hai lasciato in esecuzione si trovava nel PC desktop dell'ufficio, puoi SSH nel PC e avviare un server VNC. In questo modo, puoi almeno controllare il terminale aperto.


0

Come tutti hanno detto, è possibile utilizzare tmux. schermo non è utile dove si desidera condividere lo schermo con più persone.

Soprattutto consiglio a tutti di provare https://tmate.io/ di dare un accesso temporaneo, anche a localmachine. tmate supporta tutto quanto sopra :)

https://tmate.io/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.