Executa comandos múltiplos sobre ssh sem reconectar

1

Eu gostaria de executar vários comandos através do ssh a partir do script na minha máquina local, mas sem a necessidade de reconectar cada comando. Normalmente, eu iria com algo como:

$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'

No entanto, isso me tira a oportunidade de conhecer o código de saída e saída de cada comando. O que eu realmente gostaria de fazer é ter conexão ssh pendurado em algum lugar no fundo e então apenas alimentá-lo comandos e receber a saída dele, por exemplo (isso não é válido, obviamente, apenas um exemplo do que eu gostaria para se parecer):

$ ssh --name=my_connection [user]@[server]
$ ssh my_connection 'command_1'
$ ssh my_connection 'command_2'
$ ssh my_connection 'command_3'

É possível de alguma forma?

    
por snitko 26.03.2016 / 18:57

1 resposta

2

Já foram respondidas, por exemplo, aqui no Serverfault :

Você pode configurar ~/.ssh/config com estas opções:

Host machine1
  HostName machine1.example.org
  User yourusername
  ControlPath ~/.ssh/controlmasters/%r@%h:%p
  ControlMaster auto
  ControlPersist 10m

Depois, certifique-se de mkdir ~/.ssh/controlmasters/ e, a partir desse momento, suas conexões com machine1 persistirão por 10 minutos, para que você possa emitir mais sessões ou transferências de dados durante uma conexão.

Em seguida, o Just Work TM :

$ ssh [server] 'command_1'
# authenticate
$ ssh [server] 'command_2'
$ ssh [server] 'command_3'

Se você tem alguma razão para não usar a configuração, então você pode fazê-lo também na linha de comando:

$ ssh -MNfS ~/.ssh/controlmasters/%r@%h:%p [server]
# authenticate and go to background
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_1'
# authenticate
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_2'
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_3'
    
por 26.03.2016 / 19:07