Como verificar se consigo efetuar login 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 logar via ssh neles ou não? Quero dizer, por padrão, eu deveria conseguir fazer logon via autenticação de chave ssh .., portanto, em resumo, preciso de uma solução que classifique as linhas (servidores) no list.txt assim:

  • servidores que eu posso logar via chave ssh
  • servidores que solicitam senha (é claro que a senha é desconhecida ..)
  • servidores inacessíveis

com a ajuda dos comandos ssh e ping que você pode conseguir
#

pingnão é realmente um bom indicador. Existem muitas configurações que permitem sshconexões, mas não respondem aos pings.
27512 Mat

Respostas:


25

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

Com BatchModeativado, nenhuma solicitação de senha ou outra interação é tentada; portanto, uma conexão que requer uma senha falhará. (Também coloquei um ConnectTimeoutque deve ser ajustado para atender às suas necessidades. E escolhi nomes de arquivos muito 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 falta da chave pública do servidor) se precisar de uma classificação mais detalhada. Se você precisar dos resultados em um único arquivo classificado, apenas catos vários arquivos de saída juntos, como achar melhor.


1

Procure as várias ferramentas que automatizam a execução de comandos em vários hosts através 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 lateral: por que você está armazenando endereços IP list.txt? Nomes de servidor são suficientes. Se os nomes que você deseja usar não forem os nomes DNS, use Hostdiretivas ~/.ssh/config.


0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

O expect 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 sair. Faça o que quiser, você tem tudo o que precisa.

servers that are unreachable

Mesmo, um comando para governar todos eles, e na escuridão, prendê-los ... Hum.


0

O comando mussh produzirá apenas erros para que você possa executá-lo 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.