2010-08-27 34 views
8

Je voudrais écrire un plugin de surveillance qui vérifie divers hôtes sur mon réseau pour m'assurer que le mot de passe ou l'authentification SSH interactive n'est pas activé. C'est-à-dire, j'ai besoin d'écrire le code que:Comment puis-je détecter par programme les types d'authentification ssh disponibles?

  1. Se connecte à un port SSH.
  2. Énumère les méthodes d'authentification disponibles.
  3. Vérifie que seule l'authentification par clé est possible.

Les méthodes utilisant le code python ou bourne sh (en utilisant ssh) sont les plus intéressantes pour moi, mais d'autres langages, bibliothèques ou astuces sont également appréciés.

Répondre

13

Je suis en train d'en créer un moi-même, cependant, vous pouvez forcer ssh à sortir (à STDERR) les méthodes prises en charge à l'aide de l'option PreferredAuthentications. Cela peut facilement être analysé avec grep/python/langue de choix.

HostA$ ssh -o PreferredAuthentications=none HostB 
Permission denied (publickey,gssapi-with-mic). 
HostA$ ssh -o PreferredAuthentications=none HostC 
Permission denied (publickey,gssapi-with-mic,password,keyboard-interactive,hostbased). 
+0

Nice et simple. Merci. Serait intéressé par votre code s'il finit par être open source ... – Stef

+0

Malheureusement, ce bloc de code particulier ne pourra pas être ouvert. Pardon. C'est pourquoi je voulais partager les premières réflexions avant de devoir arrêter d'en parler. – Eadwacer

7

RFC 4252, qui définit l'authentification SSH, dit le texte suivant:

Les méthodes d'authentification sont identifiés par leur nom, tel que défini dans [SSH-ARCH]. La méthode "none" est réservée et NE DOIT PAS être listée comme supportée. Cependant, il PEUT être envoyé par le client. Le serveur DOIT toujours rejeter cette demande, sauf si le client doit se voir accorder l'accès sans aucune authentification, dans ce cas, le serveur DOIT accepter cette demande. Le but principal de l'envoi de cette demande est pour obtenir la liste des méthodes prises en charge à partir du serveur.

Ainsi, vous pouvez envoyer une demande de aucune authentification pour obtenir la liste de ceux pris en charge. Cependant, l'authentification elle-même se produit après que certaines actions de bas niveau ont eu lieu (l'échange de clé en fait partie). Vous devrez peut-être écrire une partie du protocole SSH dans le script sh, ce qui est probablement une tâche non triviale.

-1

Si vous avez besoin d'une solution * nix, vous pouvez également vous connecter aux sources OpenSSH. Si Windows vous convient - vous pouvez aussi essayer certaines librairies commerciales .NET, elles sont beaucoup plus maniables que les sources OpenSSH :)

0

Vous pouvez maintenant utiliser le nmap de script NSE intégré appelé ssh-auth-methods à faire:

# nmap -p 22 --script ssh-auth-methods 192.168.1.2 

Starting Nmap 7.60 (https://nmap.org) at 2017-12-26 00:56 GMT 
Nmap scan report for 192.168.1.2 
Host is up (0.027s latency). 

PORT STATE SERVICE 
22/tcp open ssh 
| ssh-auth-methods: 
| Supported authentication methods: 
|  publickey 
|_ keyboard-interactive 
MAC Address: AA:BB:CC:DD:EE:FF (Apple) 

Nmap done: 1 IP address (1 host up) scanned in 2.40 seconds 

En outre, une personne a fait une similar python3 script.