Como posso criar uma conexão SSH persistente para comandos de "transmissão" durante um período de tempo?

Como posso criar uma conexão SSH persistente para comandos de "transmissão" durante um período de tempo?

Digamos que eu tenha um aplicativo rodando em um PC que envia comandos via SSH para outro PC na rede (ambas as máquinas rodando Linux).

Por exemplo, toda vez que algo acontece no nº 1, quero executar uma tarefa no nº 2. Nesta configuração, tenho que criar uma conexão SSH em cada comando.

Existe alguma maneira simples de fazer isso com ferramentas básicas do Unix sem programar aplicativos cliente/servidor personalizados? Basicamente, tudo que quero é estabelecer uma conexão via SSH e enviar um comando após o outro.

Responder1

Não tenho certeza se pode ser usado em produção, mas você pode fazer algo assim:

criar arquivo em #1

1>touch /tmp/commands

Em seguida, execute o comando:

1>tail -f /tmp/commands | ssh [email protected]

Isso abrirá o arquivo /tmp/commands e começará a enviar seu conteúdo para o servidor xxxx (#2) e executá-lo linha por linha

agora, toda vez que algo acontecer no nº 1, faça:

1>echo "ls -l" >> /tmp/commands

ou

1>echo "reboot" >> /tmp/commands

tudo o que você adicionar ao arquivo /tmp/commands será enviado para #2 e executado. Apenas certifique-se de não executar nada interativo ou lidar com isso de alguma forma.

Responder2

Persistência automática usando OpenSSH

Você também pode usar o ControlMasterrecurso OpenSSH, que abre um soquete de domínio unix para a primeira conexão e reutiliza essa conexão em todas as chamadas subsequentes.

Para ativar o recurso, você pode usar -Mcomo opção de linha de comando ou ativar a ControlMasteropção em seu arquivo ~/.ssh/ssh_config, por exemplo:

ControlMaster auto

Além disso, você deve definir ControlPathusando as seguintes linhas em seu arquivo ~/.ssh/ssh_config:

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

Para manter uma conexão persistente com um host, por exemplo, se você deseja executar um script que precisa estabelecer muitas conexões ssh com o host, nenhuma das quais persistente durante toda a vida útil do script, você pode iniciar uma conexão silenciosa antecipadamente usando:

ssh -MNf remotehost

Feliz, nesono

Responder3

Em /etc/ssh/ssh_configadição

# Send keep alive signal to remote sshd
ServerAliveInterval 60

Responder4

sim, é possível com um tubo:

echo 'echo "hi"' | ssh -i my_private_key tester@host2

isso executará o comando echo "hi" no host2

você só precisa escrever um programa, que apenas forneça os comandos (não se esqueça do ;) e depois canalize essa saída para o ssh

informação relacionada