piping usando ssh sem ter que relogar para cada tubo

1

Eu tenho uma conexão ssh e tenho que enviar alguns arquivos locais e enviá-los para o servidor ssh.

Eu sei que posso fazer isso usando o seguinte comando

tar zcf - stuff | ssh user@server 'tar zxf -'

Eu gostaria de configurá-lo em sequência usando o operador & amp; & . Eu já tenho uma conexão e não quero relogar para cada tubo, já que vou usar apenas um de cada vez.

Só para esclarecer, não apenas movo tarballs pela rede, mas também insumo de dispositivos coletados periodicamente à medida que o pipeline é aberto. Apenas para impedir que as pessoas digam: "por que você não usa esse programa para mover seu arquivo pela internet" ou "você também pode usar um drive USB para transferir esses arquivos"

    
por Arno van der Weijden 15.01.2014 / 13:39

1 resposta

3

Você pode usar conexões persistentes. No seu arquivo ~/.ssh/config , adicione linhas como esta.

Host server.name.or.wildcard.goes.here
ControlPath /tmp/ssh.%r@%h:%p
ControlMaster auto
ControlPersist yes
ServerAliveInterval 300
ServerAliveCountMax 15

Isto irá dizer ao ssh para manter a conexão aberta com um arquivo em /tmp baseado na combinação usuário / host / porta. Depois de se conectar uma vez, o ssh reutilizará uma conexão existente. Ele acabará por expirar e desconectar automaticamente. Dessa forma, você recebe apenas uma solicitação de senha para vários comandos em execução rápida, até um determinado período de tempo. Se a conexão estiver ociosa por muito tempo, ela será fechada e você precisará digitar uma senha novamente.

Manter a conexão aberta também remove o atraso inicial da criação de uma conexão segura. Isso é ótimo para scripts em que você precisa fazer alguma ação, como copiar um arquivo, esperar, copiar outro arquivo, etc. cdist usa essa técnica para acelerar o provisionamento da máquina.

Você também pode procurar fazer as chaves ssh para evitar completamente a senha.

    
por fidian 15.01.2014 / 14:49