Collegare una sessione tmux a una macchina remota


31

Sto usando tmux sul mio computer locale e di solito ho diverse sessioni contemporaneamente.

Quello che faccio di solito è una sessione con finestre diverse per lavorare localmente e le altre sessioni in cui collego più finestre a un host per sessione.

Un albero di sessione / finestra sarebbe simile a questo nell'uso quotidiano che faccio di tmux:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

C'è un modo per rendere la sessione 2 e la sessione 3 una sorta di sessioni remote che si collegano a una sessione tmux creata su somehost e someotherhost?

L'albero sopra sarebbe simile a questo:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

Ho trovato questo argomento ma non sono sicuro che sia quello che voglio fare: è possibile condividere un socket tmux tra host?

Suppongo che ciò che sto cercando mi richiederebbe di avere la stessa configurazione tmux sulla mia macchina locale, somehost e someotherhost, ma non sarebbe un problema.


Hai trovato una soluzione per questo? Penso che avere una sessione remota che puoi gestire come se fosse locale è un'ottima idea, ma sembra che la risposta più votata in realtà non sia la tua domanda
mbigras

Risposte:


18

È possibile passare un comando a ssh durante la connessione a un host remoto. Includere l' -topzione con tmux attach-sessionper connettersi alla sessione tmux remota:

ssh <remote host> -t tmux attach-session

Questo post sull'attaccamento a una sessione di tmux tramite ssh lo spiega in modo più dettagliato.


18
Questo non ti dà solo una sessione nidificata? Credo che ciò che l'OP sta cercando di fare sia far apparire la sessione remota accanto alla sessione locale in modo che possano navigare all'interno di una finestra / albero di scelta di tmux.
stsquad,

Se all'host remoto sono associate più sessioni, è possibile utilizzare: ssh <host remoto> -t tmux a -t <nome-sessione>
user1757247

Ho apportato alcune modifiche per risolvere un problema che ho riscontrato e una procedura dettagliata. Spero che la revisione tra pari finirà presto. Funzionava ssh <remote host> -t /path/to/tmux a -t <my-session-name>, serviva un extra-t
Merlin,

Ho la stessa domanda del PO. Questo non risponde alla mia domanda. Crea una sessione tmux nidificata in cui devo evitare due volte tutti i comandi tmux che desidero inviare a quella sessione. Voglio qualcosa in cui la sessione remota venga visualizzata nell'elenco delle sessioni proprio come farebbe una sessione locale.
Onnipotente

2

Se il problema principale è che devi digitare ssh remotehostogni volta che apri una nuova finestra, l' default-commandopzione della sessione potrebbe essere una soluzione alternativa.

Esegue automaticamente il comando specificato quando si aprono nuove finestre nelle sessioni in cui è stato impostato.

Una semplice impostazione in .tmux.conf:

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

Questa associazione di tasti Ctrl-rcrea una nuova sessione in cui ogni finestra appena aperta viene inizialmente eseguita ssh remotehostper conto dell'utente.

Puoi scegliere gli host da connettere al momento della creazione della sessione con le seguenti impostazioni:

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

Questo ti chiede l'host che vuoi fare sshad ogni creazione della sessione (non ad ogni creazione della finestra) e avvia la sessione dedicata a quell'host.

Ci vuole poco tempo per eseguirne molti sshse si abilita il multiplexing SSH nella propria configurazione ssh. L' .ssh/configesempio è di seguito:

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

Si noti che questa impostazione di tmux non crea sessioni di tmux in host remoti. Se si perde la connessione ssh, le finestre di tmux interessate non tornano più.


1

È possibile utilizzare uno strumento come socat per eseguire il tunneling del socket di dominio unix utilizzato da tmux sul proprio computer locale. Ma stai davvero scambiando un tunnel (ssh) con un altro (socat), quindi non è davvero migliore, e anche insicuro.


Forse socatattraversare un tunnel ssh? 🙂
Onnipotente

a questo punto tmatepotrebbe essere lo strumento migliore per la gestione remota di tmux
untore

0

Se stai parlando di shell remota, intendi che puoi eseguire comandi lì, in altre parole, hai accesso diretto. In questo caso puoi semplicemente usare la sshconnessione per ogni finestra remota.

Puoi dire lì qualcosa come:

"Ehi, ma non c'è modo di avere più finestre per ogni server remoto!"

ed è vero, a causa delle restrizioni ssh. Tuttavia, puoi avviare tmux session su ciascuno o sul tuo server remoto. NOTA: in questo caso è necessario ricollegare l'impostazione predefinita Ctrl+bsul computer locale per evitare collisioni.

Inoltre ti consiglio di usare tmuxinator, è uno strumento molto utile se rictratti la tua sessione di tmux almeno ogni giorno.

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.