2010-08-27 47 views
8

我想寫一個監控插件,檢查我的網絡上的各種主機,以確保密碼或交互SSH認證未啓用。也就是說,我需要編寫代碼:如何以編程方式檢測可用的ssh認證類型?

  1. 連接到SSH端口。
  2. 枚舉可用的身份驗證方法。
  3. 驗證只有基於密鑰的認證是可能的。

使用python或bourne sh代碼(使用ssh)的方法對我來說是最有意思的,但其他語言,庫或提示也是值得讚賞的。

回答

13

我目前正在構建一個自己,但是,你可以強制ssh輸出(到STDERR)通過使用PreferredAuthentications選項支持的方法。這可以很容易地用選擇的grep/python/language解析。

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

不錯,簡單。謝謝。如果它最終成爲開源代碼,它會對你的代碼感興趣... – Stef 2010-08-31 23:08:32

+0

不幸的是,這個特定的代碼塊將不能被開源。抱歉。這就是爲什麼我想在我需要停止談論它之前分享最初的想法。 – Eadwacer 2010-09-01 00:33:54

7

RFC 4252,它定義在SSH認證,表示以下內容:

認證方法由它們的名稱來標識,如在 [SSH-ARCH]中定義。 「無」方法被保留,並且不能被列爲支持的 。但是,它可能由客戶發送。服務器必須拒絕這個請求,除非客戶端被授予訪問 沒有任何認證,在這種情況下,服務器必須接受 這個請求。發送此請求的主要目的是以從服務器獲取支持的方法的 列表。

所以,你可以發送一個請求沒有認證獲得支持的人的名單。 但是,身份驗證本身發生在某些較低級別的操作發生後(密鑰交換是其中之一),所以您可能需要在sh腳本中編寫SSH協議的一部分,這可能是一項不重要的任務。

-1

如果您需要* nix解決方案,您還可以掛接到OpenSSH源代碼。 如果Windows適合你 - 你也可以嘗試一些.NET商業庫,它們比OpenSSH源更方便:)

0

您現在可以使用nmap內置叫ssh-auth-methods做到這一點NSE腳本:

# 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 

此外,有人做了一個similar python3 script

相關問題