Como verificar se consigo logar no servidor via ssh?

13

Eu tenho uma lista de servidores:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Como posso verificar se consigo fazer login via ssh ou não? Quero dizer, por padrão, eu deveria ser capaz de fazer o login via ssh key auth .., então, em suma, eu preciso de uma solução que classifica as linhas (servidores) no list.txt assim:

  • servidores nos quais posso efetuar login via chave ssh
  • servidores que solicitam senha (obviamente, a senha é desconhecida ..)
  • servidores inacessíveis
por LanceBaynes 27.01.2012 / 05:48

4 respostas

25

Você pode fazer isso com uma combinação da opção BatchMode e "analisar" a saída. ( ssh sempre retorna 255 se não conseguir se conectar por qualquer motivo, então você não pode usar o código de retorno para distinguir entre os tipos de falhas).

Com BatchMode ativado, nenhum prompt de senha ou outra interação é tentada, portanto, uma conexão que requer uma senha falhará. (Eu também coloco um ConnectTimeout lá que deve ser ajustado para atender às suas necessidades. E escolhi nomes de arquivos realmente ruins.)

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

Você pode detectar outros tipos de erros (como a falta de chave pública do servidor), se precisar de classificação mais detalhada. Se você precisar dos resultados em um único arquivo ordenado, apenas cat dos vários arquivos de saída juntos, conforme achar melhor.

    
por 27.01.2012 / 08:42
1

Procure as várias ferramentas que automatizam a execução de comandos em vários hosts por meio do ssh. Por exemplo, com Mussh :

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo 'hostname' is alive'

Massageie a saída conforme necessário.

Nota: por que você está armazenando endereços IP em list.txt ? Nomes de servidores são suficientes. Se os nomes que você deseja usar não forem os nomes DNS, use Host diretivas em ~/.ssh/config .

    
por 28.01.2012 / 16:44
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

espera fornecerá entrada para seus comandos interativos. O cliente ssh com o sinalizador -v informará quais métodos de autenticação o servidor aceita. Se você chegar ao prompt interativo, faça-o desistir. Faça o que quiser, você tem tudo que precisa.

servers that are unreachable

O mesmo, um mandamento para governá-los todos e, na escuridão, atá-los ... Hum.

    
por 03.02.2012 / 22:18
0

O comando mussh produzirá apenas erros, para que você possa executar o comando sem depuração.

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out
    
por 18.06.2016 / 00:00

Tags