tempo limite da chave ssh-agent com tela ou tmux no host bastião

8

Normalmente eu tenho o ssh-agent em execução, eu ssh para o meu bastião, abra uma sessão do tmux e conecte-se a outras caixas através disso. O encaminhamento de chaves funciona para todas as sessões que eu abro desse ponto em diante.

Se eu retomar minha sessão do tmux após fechar o terminal, dormir meu laptop, qualquer que seja, meu encaminhamento de chaves nas minhas sessões de bastiões ainda funcionará, assim como o encaminhamento em quaisquer novas sessões. Os existentes não funcionam, no entanto.

Eu tenho uma pequena coisa no meu bashrc que mantém o encaminhamento de chaves funcionando quando eu retomo o tmux, mas estou tendo problemas para descobrir como fazê-lo continuar trabalhando para sessões abertas dentro do tmux.

Por exemplo, eu tenho bastion01, dbhost01, dbhost02, webhost01 e webhost02.

Se eu abrir uma conexão com bastion01, inicie o tmux e, em seguida, conecte-se ao dbhost01 e o encaminhamento do webhost01 funciona. Se eu fechar essa conexão, reconectar e anexar a minha sessão tmux existente, depois adicionar conexões a dbhost02 e webhost02, o encaminhamento de chave funciona nas caixas 02, mas não no 01.

Por favor, ajude!

    
por Jericon 19.06.2012 / 09:55

1 resposta

11

Cada vez que você usa ssh em bastion01 , um soquete diferente é aberto para manipular o encaminhamento de chaves. Você pode ver o nome do arquivo na variável de ambiente SSH_AUTH_SOCK . Quando você inicia tmux , o valor dessa variável de ambiente é incluído no ambiente global de tmux , que é herdado por quaisquer shells iniciados nessa sessão.

Agora, quando você se reconectar a bastion01 mais tarde, um soquete diferente será alocado para lidar com o encaminhamento de chaves (já que é uma nova sessão ssh). Você pode ver isso examinando o valor de SSH_AUTH_SOCK antes de anexar novamente à sua sessão tmux e depois. Para que o encaminhamento de chaves funcione dentro de tmux , você precisa atualizar o valor de SSH_AUTH_SOCK dentro de tmux para o nome do soquete que está sendo usado pela sessão ssh atual.

Uma maneira rápida e suja de fazer isso é escrever um script curto que salvará este novo valor em um arquivo, e executá-lo dentro de qualquer janela tmux onde você será ssh -ing de.

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

Execute esse script assim que estiver ssh em bastion01 , mas antes de anexar novamente à sua sessão do tmux. Então, antes de tentar ssh em qualquer lugar de dentro de tmux , execute o seguinte:

source ~/.auth_ssh

Cada janela tmux tem seu próprio ambiente, portanto, você precisará executá-la em cada janela em que tentar executar o ssh. Para simplificar, você pode aliasar o ssh para fazer isso por você:

alias ssh="source ~/.auth_ssh; ssh"

Observação: isso é uma simplificação excessiva de um script que usamos no trabalho para atualizar as informações de autorização do SSH. Se não funcionar direito, espero que pelo menos lhe dê informações suficientes para procurar uma solução melhor para o Google (ou alguém publique aqui uma solução melhor).

    
por 19.06.2012 / 14:55