Integração de servidor remoto, iTerm2 e tmux

30

Quero poder iniciar uma sessão do tmux em um servidor remoto e usar as janelas nativas do iTerm2 e as telas divididas em minha máquina local.

Por exemplo, digamos que meu servidor remoto tenha uma sessão tmux em execução com uma janela com dois painéis. No iTerm2 da minha máquina local, quero dois painéis nativos do iTerm2, de modo que cada painel contenha um painel tmux diferente.

Isso é possível?

(Eu sei que o inverso é possível - pelo qual eu posso executar uma sessão tmux na minha máquina local e outra máquina verá minhas guias do iTerm2 como janelas, por exemplo. Mas isso parece meio inútil.)

usuario
fonte

Respostas:

40

Sim, é possível, mas certifique-se:

  • Para instalar a versão mais recente do tmux remotamente
  • Tem a versão mais recente do iterm2 instalada localmente

Entre via ssh login@hostname -t 'tmux -CC'e voilà - isso deve abrir a janela do iTerm2 na sua caixa local e na caixa remota.

user2046612
fonte
5
Também não se esqueça de reconectar para usar ssh login@hostname -t 'tmux -CC attach'e olhar para o menu shell-> tmux-> dashboard no iterm2.
Therealmarv
11
Ei, vocês sabem como fazer isso com mosh em vez de ssh? edit: não é possível: github.com/mobile-shell/mosh/issues/640
fane89
11
Se você deseja se conectar e se conectar a uma sessão específica, poderá usar o seguinte:ssh login@hostname -t 'tmux -CC a -t sessionName'
Jeremy Iglehart
alguma chance de fazê-lo funcionar com autossh ou de alguma forma resistir a desconexões?
Igor
4

Aqui está o que funcionou para mim, com as versões estáveis ​​de lançamento de 16/12/2015, que são o iTerm 2.1.4 no OS X 10.11.2 e o tmux 1.9 no Raspbian Linux:

  1. Primeiro use .ssh/configna sua máquina local e .ssh/authorized_keysna sua máquina remota para configurar o login sem senha no sistema remoto. Depois que isso estiver configurado corretamente, você poderá fazer o login apenas fazendo ssh pi(supondo que piseja o nome do host do seu sistema remoto).

  2. Crie um novo perfil do iTerm2 que, em vez de fazer um login no seu shell local, apenas chame ssh pipara fazer login na máquina remota. Para configurar isso, acesse: Preferences / Profiles / + / Command.Command = "ssh pi"

  3. Abra uma janela do iTerm2 na máquina remota através do seu novo perfil, executando: Profiles / Pi.

  4. Na janela de login remoto do iTerm2, na linha de comando, faça: tmux -CC . Depois disso, sua janela do iTerm2 mostra o modo de comando tmux, o tmux cria uma nova sessão e o iTerm2 cria imediatamente uma nova janela do iTerm2 para essa sessão do tmux. Dentro dessa nova janela do iTerm2, a guia inicial do iTerm2 representa a única janela do tmux dessa sessão. Se você fizer o CMD-T, isso criará uma nova guia iTerm2, representando uma nova janela do tmux.

Como você usa isso?

  • Neste ponto, você pode executar o "Shell / tmux / Dashboard" para observar o entendimento do iTerm2 das sessões e janelas existentes do tmux.

  • Se você fechar a janela do iTerm2 que representa a sessão tmux, ela matará a sessão subjacente e todas as suas janelas tmux.

  • Se você fechar a janela do iTerm2 mostrando o modo de comando tmux, parece que apenas mata a instância do cliente tmux que estava conectada a essa sessão, para que ambas as janelas do iTerm2 desapareçam, mas a sessão do tmux ainda está ativa e você pode se reconectar ao isto.

  • Se você quiser um desanexamento mais ordenado do tmux, basta fazer ESC na janela do modo de comando do tmux.

  • Se, em vez de criar uma nova sessão do tmux, o que você queria originalmente era anexar a uma sessão existente, poderá fazer isso com tmux -CC attach .

Em teoria, acho que deveria haver uma maneira de configurar o iTerm2 ou tmux para que, quando você se conectar ao sistema remoto, seja automaticamente conectado a qualquer sessão existente do tmux, mas não consegui fazer isso, modificando a linha de comando o perfil do iTerm2.

algal
fonte
Para conectar-se automaticamente a uma sessão do tmux em execução no login ssh, uso [[ $- == *i* && $SSH_TTY && -z $TMUX && ! -r ~/.notmux ]] && tmux attach-session && exitno .bashrc (ou algo chamado a partir daí) Os testes são para: shell interativo, sessão do ssh, ainda não sendo executado no tmux, sem emergência, não faça-o Arquivo. O exitfinal fecha a conexão ao sair do tmux (principalmente para mim).
zany