
我的一些 Linux 和 FreeBSD 系統有幾十個使用者。工作人員將使用這些「ssh 網關」節點透過 SSH 存取其他內部伺服器。
我們擔心其中一些使用未加密的 SSH 私鑰(沒有金鑰的金鑰)密碼短語。這不好,因為如果破解者能夠存取他們在這台電腦上的帳戶,他們就可以竊取私鑰,並且現在可以存取使用相同金鑰的任何電腦。出於安全原因,我們要求所有使用者使用密碼加密其 SSH 私鑰。
如何判斷私鑰是否未加密(例如不包含密碼)?與非 ASCII 鎧裝鑰匙相比,是否有不同的方法可以在 ASCII 鎧裝鑰匙上執行此操作?
更新:
為了澄清這一點,假設我擁有機器上的超級用戶訪問權限,並且我可以讀取每個人的私鑰。
答案1
嗯,密碼為空的 OpenSSH 私鑰實際上並未加密。
加密的私鑰在私鑰檔案中如此聲明。例如:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC
BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----
所以像
# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa
應該可以解決問題。
答案2
我到處尋找這個問題,但從未找到令人滿意的答案,但我設法構建了一個答案,所以...
請注意,如果有效,這將更新文件,因此,如果您試圖不被正在測試其金鑰的使用者註意到,您可能需要先複製金鑰。 OTOH,由於您剛剛使用無密碼金鑰捕獲了您的用戶,也許您並不關心他們是否注意到。 :D
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1
答案3
我想,如果您有權訪問私鑰,您可以使用它而無需密碼短語來根據公鑰進行身份驗證。如果這有效,您就知道它沒有密碼。如果有,它會給你一個錯誤訊息。
如果您無權存取私鑰,我懷疑您能否檢測到這一點。密碼的目的是「解鎖」私鑰,它對公鑰沒有任何作用。
事實上,如果這樣做的話,系統的安全性就會降低。人們可以使用公鑰,該公鑰可用於嘗試發動暴力破解或其他攻擊以試圖破解密碼。