Resumo: Existe uma maneira de iniciar (a partir de um computador local) um trabalho de processamento de dados em um servidor remoto, que precisará fazer download de dados por ssh em pequenos lotes repetidamente de um servidor remoto diferente, enquanto apenas já armazenando chaves ssh no computador local ( usando senha auth não é desejável ou possível )?
A configuração da rede é a seguinte (tudo está rodando linux e openssh):
Computador local ----- > Servidor ("trabalho") ----- > Servidor ("git")
O computador local tem chaves ssh dedicadas para o servidor "trabalho" e "git" e usa o encaminhamento do agente ssh para conectar-se ao servidor "git" do servidor "trabalho" ( sem chaves armazenadas em outro local diferente do computador local ).
Eu gostaria de me conectar ao servidor "work" do computador local e executar uma tarefa em uma sessão de tela no servidor "work", que fará o download dos dados através do ssh do servidor "git". (O trabalho envolve o processamento de um grande número de arquivos grandes em um repositório git-annex e, portanto, é necessário fazer o download de um pequeno número de arquivos por vez, e então excluir imediatamente os dados do servidor "work". Em particular, gostaria que as conexões ssh necessárias para executar git annex get
e git annex drop
continuassem a funcionar quando eu removesse a sessão de tela.
Por que isso é razoável de se querer fazer: alguém tem acesso a um servidor que está sempre ativo e que pode ser usado para processar dados por longos períodos, mas o armazenamento é limitado. Outro servidor tem os dados (compartilhados entre muitas pessoas) e, portanto, não é desejável nem possível executar comandos nesse servidor. A pessoa quer iniciar o trabalho no servidor de seu laptop, desconectar e desligá-lo e continuar o dia enquanto o servidor trabalha nele.
Em nenhum momento é aceitável armazenar quaisquer chaves ssh em qualquer lugar, exceto no computador local.
Isso é possível? (o "não fazer nada e ver se funciona" abordagem : Se eu começar a executar o procedimento na sessão de tela e, em seguida, desanexar e desconectar de ssh, ssh não autentica - porque o ssh -agent estava no computador local que acabou de desconectar - e os downloads do git-annex falham)
O que eu tentei: Multiplexação de SSH ( link )
Eu configurei minha configuração no servidor de "trabalho" da seguinte forma:
Host <"git" server>
ControlMaster yes
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlPersist 10m
Primeiro, conectei-me ao "trabalho" e abri uma sessão de tela. Eu então corro ( -M
é para estabelecer uma conexão mestre para multiplexação, -N
é para não executar nenhum comando, já que o servidor "git" não permite acesso ao shell)
ssh -M -N <user>@<"git" server>
Inicio então o procedimento de download / processamento de dados. Enquanto a sessão de tela é anexada, os downloads git sobre o ssh funcionam corretamente. Quando eu desanexar a sessão de tela e sair da minha sessão ssh do computador "de trabalho" e depois reconectar ao "trabalho" e reconectar a sessão de tela, o comando ssh que deveria ser executado enquanto a sessão de tela foi desanexada fornece o erro
Error reading response length from authentication socket
e falha na autenticação ( observação: este erro não aparece com a abordagem "não fazer nada e ver se funciona" ). Eu não sei se isso é um bug / erro na minha configuração ou se a multiplexação ssh simplesmente não é projetada para autenticar mais sessões ssh, uma vez que o agente ssh que autenticou o primeiro comando não está mais disponível.
Tags ssh gnu-screen ssh-agent git-annex