Discrepância no comportamento do agente ssh

3

Parece que estou tendo uma pequena discrepância entre o comportamento do ssh-agent para duas contas que configurei.

Eu escrevi um script de monitoramento simples para verificar a disponibilidade de algumas VMs em execução. Eu fiz todos os testes e depuração com a minha conta de acesso principal. No processo, gerei um par de chaves SSH, iniciei o ssh-agent e adicionei a identidade ao agente para permitir o script para o ssh sem a necessidade de uma senha.

Agora, gostaria de executar este script como um usuário da conta de serviço. Eu criei a conta de serviço e, para gerar as chaves, defino temporariamente o shell de login como / bin / bash. Gerei minhas chaves, removi a frase secreta e adicionei a identidade ao agente.

A discrepância parece estar na forma como o shell se conecta ao agente. Na minha conta de usuário, não tive que reiniciar o agente desde que comecei a testar (cerca de duas semanas). Mas, quando tento executar o script na conta de serviço, pareço ter que reiniciar o agente a cada vez, adicionar a identidade e, em seguida, executar o trabalho.

Idealmente, gostaria que o agente fosse executado indefinidamente e que a conta de serviço se reconectasse a ele automaticamente sempre que o script fosse executado, para que eu não precise gerenciar processos no script. Eu olhei para as configurações de cada conta e não consigo encontrar nenhuma diferença. Qualquer insight seria muito apreciado.

** Editar: esqueci de salientar que o agente é executado continuamente, mas os processos do shell para a conta de serviço não parecem estar utilizando-o e um novo precisa ser iniciado:

ovmmon   14043  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent
ovmmon   14952  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent
    
por tdk2fe 20.05.2013 / 15:32

2 respostas

5

Uma das duas coisas está acontecendo aqui:

  1. O agente ssh está realmente sendo fechado quando você faz logout
  2. O ssh-agent ainda está em execução, mas você está perdendo as informações sobre seu PID e pipe

Você pode verificar qual é o caso fazendo um ps -ef e checando o ssh-agent.

Se o agente ssh estiver morto, você precisa de uma maneira de mantê-lo vivo. Aqui estão três maneiras de fazer isso:

  1. Você pode iniciar o agente ssh a partir de um script de início quando o servidor é inicializado e fazer o eco da saída para um arquivo (com os direitos de acesso apropriados para evitar que seja usado incorretamente). Se você fizer a senha sem senha, também poderá adicionar a chave do script. (Obviamente, a última parte só é aconselhável quando a conta à qual você está se conectando tem direitos muito limitados no servidor remoto). Em seguida, faça com que seu script leia as informações do agente SSH do arquivo criado na inicialização.
  2. Use a tela quando você fizer login na conta de serviço; em seguida, desconecte-se da sessão de tela depois de iniciar o agente.
  3. Use nohup ao iniciar o agente.

Se o agente ssh não estiver morto, mas você perdeu as informações do ambiente, certifique-se de que, ao iniciá-lo, ele grave suas variáveis de ambiente em um arquivo específico. Então, ao efetuar o login, tenha sua fonte de shell esse arquivo.

    
por 20.05.2013 / 15:47
3

Se você estiver usando um método de invocação de sub-shell, o agente ssh morrerá no logout do shell. Se você usar o método eval, o shell permanecerá em execução até que seja finalizado manualmente.

Veja: link

Especificamente: link

Além disso, sei que quando executar a partir de variáveis cron ENV pode causar problemas. Então essa é outra área para verificar.

    
por 20.05.2013 / 15:42