ssh oddity do LocalCommand - por que preciso fazer um background em um rsync?

4

Estou usando o rsync para copiar arquivos para um servidor de destino quando me conecto a ele usando o ssh. Para fazer isso eu tenho o seguinte no meu arquivo de configuração ssh: -

ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p
...
...
host dns
   LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no" ~/.cfg/ dns:.cfg/ &
...
...

O bit ControlMaster significa que, após um ssh para o servidor, as conexões ssh subsequentes não solicitam a senha. Assim, o rsync é executado sem pedir a senha.

A estranheza é que não funciona sem o & no final da linha LocalCommand no arquivo de configuração. Por que isso precisa disso? Sem o & o login apenas trava depois de digitar a senha e se você CTRL / C você recebe um erro rsync como foi interrompido pelo CTRL / C e a conexão falhar. A cópia do rsync leva apenas uma fração de segundo, o travamento não é porque o rsync demora muito tempo.

Demorei um pouco para descobrir como fazer isso funcionar, inicialmente sem o & apenas pendurou, como eu disse. Eu então coloquei o comando rsync em um script e chamei isso, ele ainda estava travado. Eu achei que a partir de um terminal do script e executando o rsync em que funcionou OK. Então eu fui para trás e coloquei o & depois do rsync no script e que funcionou, finalmente cheguei ao que tenho acima.

Não é um grande problema, estou feliz com a maneira como isso funciona, mas adoraria mostrar por que o & é necessário.

Isso é tudo no Linux, ambos terminam com o xubuntu / ubuntu.

    
por Chris Green 10.08.2018 / 14:42

1 resposta

1

Possivelmente responda em este post do blog :

Finally, there is something of an annoyance with ControlMaster, and it’ll probably confuse you mightily when you first come across it. Because all of your SSH sessions are multiplexed down a single TCP connection initiated by the first SSH session, that first session must stay alive until all of the other sessions are complete. This problem will manifest itself as an apparent “hang” when you log out of the remote session that is acting as the master — instead of getting your local prompt back, SSH will just sit there. If you Ctrl-C or otherwise kill this session, all of the other sessions you’ve got setup to that server will drop, so don’t do that. Instead, when you logout of all the other sessions, the master will then return to the local prompt.

Eu resolvi um problema semelhante adicionando -S none para listar as opções do ssh:

LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no -S none" ~/.cfg/ dns:.cfg/
    
por 25.10.2018 / 23:45

Tags