Estou executando um script conectando via SSH sem senha em um host remoto. Quero definir um tempo limite, para que, se o host remoto estiver demorando um tempo infinito para executar, desejo sair dessa sessão ssh e continuar outras linhas no meu script sh.
Alguma idéia de como fazer isso?
ssh
sessão" (pergunta "Como aumentar o tempo limite da conexão SSH?"), Este é o lugar errado . A resposta está neste link sobre ssh-timeout .Respostas:
Onde 10 é o tempo em segundos. Esse tempo limite se aplica apenas à criação da conexão.
fonte
Use o
-o ConnectTimeout
e-o BatchMode=yes -o StrictHostKeyChecking=no
.O ConnectTimeout evita que o script seja interrompido , o BatchMode o impede com o Host desconhecido, YES para adicionar a known_hosts e StrictHostKeyChecking adiciona a impressão digital automaticamente.
**** NOTA **** O "StrictHostKeyChecking" foi projetado apenas para redes internas nas quais você confia nos hosts. Dependendo da versão do cliente SSH, o "Tem certeza de que deseja adicionar sua impressão digital" pode fazer com que o cliente seja interrompido indefinidamente (principalmente versões antigas em execução no AIX). A maioria das versões modernas não sofre com esse problema. Se você precisar lidar com impressões digitais com vários hosts, recomendo manter o arquivo known_hosts com algum tipo de ferramenta de gerenciamento de configuração, como puppet / ansible / chef / salt / etc.
fonte
-o StrictHostKeyChecking=no
não aborda a questão, mas é uma péssima idéia se você se preocupa com segurança, que pode ser a razão pela qual você está usando o SSH em primeiro lugar.StrictHostKeyChecking=no
se você se preocupa com segurança. @ Doug: o script não travará - apenas insistirá que você faça o ssh para o host remoto manualmente pela primeira vez, para que ele conheça o host. Mas ele irá protegê-lo contra ataques MITM. Edite esta resposta para refletir isso, pois é um conselho muito perigoso. E nem foi solicitado.tente isto:
timeout executa o comando ssh (com args) e envia um SIGTERM se o ssh não retornar após 5 segundos. para obter mais detalhes sobre o tempo limite, leia este documento: http://man7.org/linux/man-pages/man1/timeout.1.html
ou você pode usar o param do ssh:
fonte
brew install coreutils
e usegtimeout
(fonte: stackoverflow.com/questions/3504945/timeout-command-on-mac-os-x ).timeout 3s ssh user@server 'sleep 5; echo blarg >> /tmp/blarg'
Isso mata o processo no lado do cliente SSH, mas / tmp / blarg ainda é modificado no servidor remoto. Isso significa que, se você estiver executando um trabalho descontrolado com muita CPU no servidor remoto, irá vazar os processos.Você também pode se conectar com a bandeira
portanto, o cliente SSH enviará um pacote nulo ao servidor a cada<secs>
segundo, apenas para manter a conexão ativa. No Linux, isso também pode ser definido globalmente/etc/ssh/ssh_config
ou por usuário~/.ssh/config
.fonte
Se tudo mais falhar (incluindo não ter o
timeout
comando), o conceito neste script de shell funcionará:fonte
Bem, você pode usar o nohup para executar o que estiver executando no 'modo sem bloqueio'. Portanto, você pode apenas verificar se o que deveria executar, executou ou sair.
Então, no segundo, você apenas verifica se o arquivo existe.
fonte