A melhor maneira de se conectar a um contexto de usuário existente por meio do SSH

2

O que gostaríamos de fazer:

Temos máquinas virtuais de curta duração para executar scripts. As máquinas virtuais são usadas por meio do SSH para realizar "builds" (sequência de scripts) e descartadas quando todos os scripts são concluídos. Cada script é executado através de uma nova conexão / sessão SSH.

Isso funciona muito bem para quase todos os cenários que temos, exceto dois casos de uso principais:

  1. quando o script precisa controlar o iOS Simulator instalado na máquina virtual (esse é o caso de uso principal que queremos resolver no momento) - nota técnica: o Simulador do iOS só pode ser controlado adequadamente a partir de um contexto da GUI, agora usamos um mini servidor especial baseado em Go ( link ) que é iniciado como um agente de inicialização quando o usuário faz login e, por isso, tem o contexto da GUI do usuário
  2. para manter o acesso ao keychain do OS X (por meio do SSH, os keychains do OS X podem ser abertos e gerenciados, mas o keychain é bloqueado quando a sessão do SSH é fechada)

Esses dois problemas poderiam ser resolvidos se pudéssemos de alguma forma iniciar um agente dentro da máquina virtual e depois poderíamos nos conectar a esse daemon / agente específico, enviar os comandos que queremos executar para o daemon / agent e ter o daemon / agent executá-lo. Um requisito é ter um fluxo da saída dos scripts / comandos reais que são executados dentro da máquina virtual.

O que fazemos agora é executar os scripts / comandos através de um simples comando SSH como ssh ssh-params 'bash -l -c "echo \"hello world\""' . É claro que este é um exemplo seriamente simplificado, mas está próximo do que temos agora, e com isso podemos obter a saída do comando como um fluxo para cumprir o requisito de registro e adicionalmente podemos obter o código de saída do comando .

Então, o que gostaríamos de fazer é algo semelhante em termos que o comando é especificado "de fora" da máquina virtual, mas executado dentro da máquina virtual e da saída do comando está disponível para o processo "externo" (chamador) como um fluxo, não apenas após o script terminar, assim como o código de saída do comando pode ser recuperado facilmente pelo processo "externo" .

Em termos de ferramentas, somos bastante abertos (não precisamos depender do SSH, é assim que funciona no momento), mas a ferramenta deve estar disponível para o OS X e, se possível, para o Linux (embora neste caso O caso OS X é a prioridade, já que ambos os casos de uso problemáticos estão relacionados ao OS X).

TL; DR; gostaríamos de uma ferramenta que pudesse ser usada de forma semelhante ao comando SSH mencionado acima mas que pudesse se conectar a um agente / daemon que já estivesse sendo executado no remoto (máquina virtual) end, e a saída gerada pelo "comando remoto" especificado deve estar disponível para o processo do chamador como um fluxo, não apenas no final do comando . Além de coletar as saídas do comando remoto, também precisamos obter o código de saída .

Palavras finais : finalmente, decidimos criar nossa própria solução porque não conseguíamos descobrir uma maneira mais fácil. Você pode encontrá-lo no GitHub: link - ele suporta todas as coisas necessárias que eu descrevi e além disso tem a variável de ambiente de comando manipulação de suporte (para definir variáveis de ambiente apenas para esse comando remoto).

    
por Viktor Benei 15.04.2015 / 17:39

1 resposta

3

Você poderia simplesmente executar seus comandos em uma tela ou sessão tmux na VM? Isso permitiria várias etapas para conectar / enviar comandos para a mesma sessão

    
por 15.04.2015 / 17:49