Método para verificar a conectividade com outro servidor

4

Eu quero verificar a conectividade entre dois servidores (ou seja, se o ssh for bem-sucedido).

A idéia principal é verificar o caminho mais curto entre server-a e server-b usando uma lista de servidores do meio (por exemplo, se eu estiver no servidor dev e eu quiser conectar ao servidor prod - geralmente um ssh direto falhar).

Como isso pode demorar um pouco, prefiro não usar o SSH - prefiro verificar primeiro se posso me conectar e, se estiver, tente conectar-se por meio do SSH.

Algumas rotas possíveis para obter a ideia:

server-a -> server-b
server-a -> middle-server-1 -> server-b
server-a -> middle-server-6 -> server-b
server-a -> middle-server-3 -> middle-server-2 -> server-b

Espero que você entenda o que estou procurando?

    
por Nir 26.08.2013 / 23:24

3 respostas

13

Para verificar a conectividade do servidor, você tem 4 ferramentas à sua disposição.

  1. ping

    Isso verificará se algum dos servidores com os quais você está tentando se conectar, mas não poderá ver se o middle-server-1 pode acessar o server-b, por exemplo.

    Você pode bloquear por quanto tempo o ping tentará fazer ping em outro servidor através do uso do interruptor de contagem ( -c ). Limitá-lo a 1 deve ser suficiente.

    $ ping -c 1 skinner
    PING skinner (192.168.1.3) 56(84) bytes of data.
    64 bytes from skinner (192.168.1.3): icmp_req=1 ttl=64 time=5.94 ms
    
    --- skinner ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.946/5.946/5.946/0.000 ms
    

    Você pode verificar o status desse comando por meio do uso dessa variável, $? . Se tem o valor 0, então foi bem sucedido, qualquer outra coisa e ocorreu um problema.

    $ echo $?
    0
    
  2. traceroute

    Outro comando que você pode usar para verificar a conectividade é traceroute .

    $ traceroute skinner
    traceroute to skinner (192.168.1.3), 30 hops max, 60 byte packets
    1  skinner (192.168.1.3)  0.867 ms  0.859 ms  0.929 ms
    

    Mais uma vez, esta ferramenta não mostrará a conectividade através de um servidor para outro (mesmo problema que o ping), mas mostrará o caminho através da rede que você está levando para chegar a outro servidor.

  3. ssh

    ssh pode ser usado em BatchMode para testar a conectividade. Com BatchMode=yes , você tentará se conectar a outro servidor, ignorando o uso de nome de usuário / senhas e somente chaves públicas / privadas. Isso normalmente acelera bastante as coisas.

    $ ssh -o "BatchMode=yes" skinner
    

    Você pode construir um forro aproximado que verificará a conectividade com um servidor:

    $ ssh -q -o "BatchMode=yes" skinner "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
    
    SSH_OK
    

    Se funcionar, você receberá uma mensagem SSH_OK , se falhar, você receberá uma mensagem SSH_NOK .

    Uma alternativa para esse método é incluir também a opção ConnectTimeout . Isso evitará que o cliente ssh demore muito tempo. Algo como isso normalmente é aceitável, ConnectTimeout=5 . Por exemplo:

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 skinner echo ok 2>&1
    ok
    

    Se falhar, será algo como isto:

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 mungr echo ok 2>&1
    ssh: connect to host 192.168.1.2 port 22: No route to host
    

    Ele também definirá o status de retorno:

    $ echo $?
    255
    
  4. telnet

    Você pode usar este teste para ver se um servidor ssh está acessível em outro servidor usando apenas um% básicotelnet:

    $ echo quit | telnet skinner 22 2>/dev/null | grep Connected
    Connected to skinner.
    
por 27.08.2013 / 00:24
5

nc também pode "pingar" a porta

nc -z hostname 22

Desta forma, você pode pingar a porta 22 na máquina, mesmo que a máquina esteja configurada para não responder ao ping regular (ICMP)

    
por 29.08.2013 / 02:40
0

Como alternativa, você pode tentar reduzir o tempo do SSH definindo algumas opções de configuração, como ConnectTimeout=1 . UseDNS=no também ajuda com sistemas que não têm DNS reverso configurado corretamente.

    
por 27.08.2013 / 00:25