Como compartilhar / persistir uma conexão SSH a partir de um script de shell que executa vários comandos

4

Eu tenho um shell script que se conecta via SSH ao mesmo host (meu-servidor) e executa uma variedade de comandos misturados em todo o script. Por exemplo:

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "foocommand here"

mkdir -p /path/here
touch service.conf
...

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "barcommand here"

mkdir -p /other/path/here
touch /other/path/here/service.conf
...

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "darcommand here"

E assim por diante. O problema é que cada conexão SSH é aberta e o handshake leva um pouco de tempo, pois o servidor my-server está geograficamente longe do script em execução.

Existe uma maneira de acelerar esse processo e evitar a abertura de uma nova conexão SSH para cada comando necessário? Qualquer coisa como http manter vivo para o SSH?

    
por Justin 06.07.2018 / 21:30

1 resposta

5

Sim, você pode configurar o ssh para manter uma conexão persistente com um servidor remoto. Isso é feito com as opções ControlMaster , ControlPath e ControlPersist .

Uma configuração de amostra (local em $HOME/.ssh/config ):

ControlMaster auto
ControlPath ~/.ssh/sockets/%C
ControlPersist 600

A configuração de ControlPath ativa o compartilhamento de conexão; enquanto uma conexão ssh com um host remoto é aberta, outras conexões ssh com o mesmo usuário / host serão multiplexadas pela conexão.

A configuração ControlPersist permite que a conexão permaneça ativa por um período após a última sessão ssh.

A definição de ControlMaster para auto permite que o ssh reutilize uma conexão existente ou crie uma nova conexão, se necessário.

Veja a página ssh_config(5) man para uma explicação detalhada dessas opções.

    
por 06.07.2018 / 21:37

Tags