Reutilizando a sessão ssh para comandos repetidos de rsync [duplicado]

23

Eu tenho um servidor remoto acessível através de uma cadeia de proxies SSH. O canal resultante é amplo e rápido o suficiente, mas a configuração demora alguns segundos.

Eu quero executar periodicamente rsync neste servidor, sincronizando pequenas alterações em uma árvore de arquivos relativamente grande.

Quando eu faço isso claramente por rsync -r source_dir remote_host:target_dir , a maior parte do tempo é gasto estabelecendo a conexão. Para comparação, estabelecer uma conexão interativa com esse host leva aproximadamente o mesmo tempo.

Existe uma maneira de reutilizar de alguma forma a conexão SSH em várias invocações de rsync , para evitar o atraso de conexão?

O problema é que eu não quero a replicação contínua de arquivos para o host remoto; A árvore de arquivos tem que ser consistente no momento da replicação, então eu gostaria de acionar o evento rsync sozinho.

Estou aberto a usar outra coisa, por exemplo git , desde que eu evite o atraso constante de reconexão e não tenha que abrir uma porta de escuta no host remoto.

    
por 9000 10.10.2012 / 20:55

1 resposta

33

Sim, veja as opções ControlMaster e ControlPath .

Você pode iniciar a conexão principal com:

mkdir ~/.ssh/ctl
ssh -nNf -o ControlMaster=yes -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host

E, em seguida, use o rsync com:

rsync -e "ssh -o 'ControlPath=$HOME/.ssh/ctl/%L-%r@%h:%p'" ...

Então

ssh -O exit -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host

para finalizar a conexão principal.

(E, a propósito, algumas versões do ubuntu têm um recurso chato em que eles reconstroem /etc/motd em cada login (incluindo sessões ssh não-interativas), o que pode levar muito tempo se parte disso envolve checar se as atualizações estão disponíveis por exemplo. IIRC, você pode desabilitá-lo removendo pam_motd da sua configuração de pam)

    
por 10.10.2012 / 21:21

Tags