Como posso manter a conexão ssh aberta e usá-la a partir de scripts de shell?

4

Atualmente, invoco o seguinte:

$ ssh [email protected] my_cmd

Isso é lento e não é fácil de automatizar com segurança. Eu gostaria de estabelecer uma conexão ssh uma vez e ter algum script que irá encaminhar meus comandos para host.com e imprimir a saída.

Isso é possível?

Adicionar minha máquina a authorized_keys não é uma opção para mim e não resolveria o problema de lentidão.

    
por Łukasz Lew 25.07.2015 / 08:26

2 respostas

10

O recurso é chamado de ControlMaster , que multiplexa em um canal existente. Faz com que o ssh faça todas as trocas de chaves e efetue login apenas uma vez; assim, os comandos posteriores passarão muito mais rápido. Você o ativa usando essas três linhas no seu .ssh/config :

Host host.com
  ControlMaster auto
  ControlPath ~/.ssh/master-%C
  # for openssh < 6.7 you need to use this one:
  # ControlPath ~/.ssh/master-%r@%h-%p
  ControlPersist 5m

Você pode ajustá-lo às suas necessidades; Uma alternativa é que você pode abrir uma conexão mestre que permanece aberta durante seus outros comandos; então você não precisaria de ControlPersist .

Existem muitas possibilidades com esse recurso para ajustar, mas certifique-se de armazenar seu ControlPath socket em um local seguro, que não seja legível por outros usuários, caso contrário, ele poderá ser usado incorretamente.

Mais informações podem ser encontradas na página de manual ssh_config(5) .

    
por 25.07.2015 / 08:54
2

Se você tem o controle da máquina ao ponto de automatizar as tarefas nela, por que adicionar sua chave a authorized_keys não é uma opção?

ssh-copy-id -i ~/.ssh/foo [email protected]

Então você não precisa digitar uma senha toda vez que se conectar.

Se o maior problema é que as conexões demoram muito tempo para se conectar, você poderia reutilizar uma única conexão adicionando control master à sua configuração ssh. Deixe essa conexão em execução, e quaisquer conexões subseqüentes serão quase instantâneas.

Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600

link

A longo prazo, se você estiver automatizando tarefas, é melhor que você use uma estrutura de automação que lide com o estabelecimento da conexão para você, como:

por 25.07.2015 / 08:54