簡介
本檔案將說明Cisco IOS®路由器上的問題,當Secure Shell(SSH)連線到路由器時有時會失敗,並在SSH調試中報告使用者驗證失敗。即使輸入的使用者憑證正確且相同的憑證能正確用於Telnet,也會發生此問題。
附註:思科錯誤ID CSCum19502已失敗,以便使SSH和Telnet之間的行為保持一致。
問題
請注意,在這些調試中,即使啟用了「debug aaa authentication」,也不會列印驗證、授權和記帳(AAA)調試來顯示實際呼叫了AAA並返回了故障。
Router#show debug
General OS:
AAA Authentication debugging is on
SSH:
Incoming SSH debugging is on
ssh detail messages debugging is on
Router#
*Sep 30 20:28:57.172: SSH2 2: MAC compared for #8 :ok
*Sep 30 20:28:57.172: SSH2 2: input: padlength 15 bytes
*Sep 30 20:28:57.172: SSH2 2: Using method =
keyboard-interactive
*Sep 30 20:28:57.172: SSH2: password authentication failed
for cisco
*Sep 30 20:28:59.172: SSH2 2: send:packet of length 64
(length also includes padlen of 14)
*Sep 30 20:28:59.172: SSH2 2: computed MAC for sequence
no.#8 type 51
*Sep 30 20:29:01.751: SSH2 2: ssh_receive: 144 bytes received
*Sep 30 20:29:01.751: SSH2 2: input: total packet length of
128 bytes
*Sep 30 20:29:01.751: SSH2 2: partial packet length(block size)
16 bytes,needed 112 bytes,
有時,在嘗試使用SSH時也會看到此處顯示的系統日誌,但它不會一直列印:
*Sep 30 20:23:27.598: %AAA-3-ACCT_LOW_MEM_UID_FAIL: AAA unable to create UID for incoming
calls due to insufficient processor memory
問題的根本原因是路由器的記憶體不足。當AAA無法分配記憶體為傳入SSH會話建立唯一ID(UID)時,即使未嘗試AAA,也會報告與AAA身份驗證失敗相同的故障。當處理器可用記憶體低於AAA「驗證低記憶體閾值」時,就會發生此情況,預設設定為總記憶體的3%,可以使用show aaa memory 命令檢查。在聚合服務路由器(ASR)1001平台上經常出現此問題,因為路由器上的內存有限,而使用繁重的控制平面(如完全邊界網關協定(BGP)表)時可能會耗盡記憶體。在ASR 1001上安裝了4GB的DRAM,但在所有其他CPU和Linux處理器啟動後,Cisco IOS會獲得1.1 GB的剩餘空間。一旦記憶體耗盡,AAA無法再為UID分配記憶體,SSH便無法工作。
請考慮來自兩個ASR的此記憶體資料:
SSH Not Working:
----------------
ASR1#show memory summary
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 7FE150387010 1160982064 1146067400 14914664 14225352 13918620
lsmpi_io 7FE14FB7E1A8 6295128 6294304 824 824 412
SSH Working:
------------
ASR2#show memory summary
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 7FFB6ACB0010 1160982064 1120122056 40860008 29163912 24132068
lsmpi_io 7FFB6A4A71A8 6295128 6294304 824 824 412
根據簡單的計算,在非工作ASR上,可用記憶體的百分比是總可用記憶體的1.28%(14914664 / 1160982064 * 100)。在工作ASR上為3.51%(40860008 / 1160982064 * 100),剛好高於身份驗證低記憶體閾值。
這個問題很難識別,因為當由於記憶體不足而發生此錯誤時,通常不會列印%AAA-3-ACCT_LOW_MEM_UID_FAIL消息。此外,AAA計算記憶體閾值的方式並不依賴於路由處理器(RP)上可用的處理器記憶體的原始量,而是依賴於總記憶體的百分比。因此,如果發生這種情況,並且未報告任何malloc故障,則在show memory summary命令輸出中可能仍然會有大量處理器記憶體顯示為可用。
附註:思科錯誤ID CSCuj50368 已失敗,以便使SSH錯誤訊息能更清楚說明驗證失敗的實際原因。
要驗證這是否確實有問題,一種方法是檢視AAA記憶體統計資訊:
Router#show aaa memory
Allocator-Name In-use/Allocated Count
----------------------------------------------------------------------------
AAA AttrL Hdr : 0/65888 ( 0%) [ 0] Chunk
AAA AttrL Sub : 0/65888 ( 0%) [ 0] Chunk
AAA DB Elt Chun : 544/65888 ( 0%) [ 4] Chunk
AAA Unique Id Hash Table : 8196/8288 ( 98%) [ 1]
AAA chunk : 0/16936 ( 0%) [ 0] Chunk
AAA chunk : 0/16936 ( 0%) [ 0] Chunk
AAA Interface Struct : 1600/1968 ( 81%) [ 4]
Total allocated: 0.230 Mb, 236 Kb, 241792 bytes
AAA Low Memory Statistics:
__________________________
Authentication low-memory threshold : 3%
Accounting low-memory threshold : 2%
AAA Unique ID Failure : 96
Local server Packet dropped : 0
CoA Packet dropped : 0
PoD Packet dropped :
如果「AAA Unique ID Failure」計數隨著每次失敗的SSH嘗試遞增,則問題是由此記憶體不足情況引起的。
為了對此問題進行故障排除,應採取標準的ASR 1000記憶體故障排除步驟以查明原因。有關如何對ASR上的記憶體問題進行故障排除的詳細資訊,請參閱記憶體使用率概述。
解決方案
為了對此問題進行故障排除,應採取標準的路由器記憶體故障排除步驟。這些步驟可確定問題是否由正常使用引起,在這種情況下,可能需要平台/記憶體升級;或記憶體洩漏,可能需要額外的記憶體監控和故障排除。如需詳細資訊,請參閱記憶體洩漏偵測器和常見記憶體疑難排解技巧。
對於沒有思科錯誤ID CSCum19502修復程式的版本,最明顯的解決方法是啟用對路由器的Telnet或控制檯訪問,因為只有SSH受此閾值影響。
提示:aaa memory threshold命令允許您將閾值降低到最小1%。但是,雖然這提供了到路由器的SSH臨時方法,但可能會導致其它問題,例如允許處理器記憶體使用率在管理員收到警報之前降低非常低。這可能會導致更重要的進程(例如耗盡大量記憶體的BGP)不再工作。因此,應謹慎使用這種方法。
如前所述,路由器不洩漏記憶體,只是對啟用的功能超額使用是完全合理的。在這種情況下,可能需要平台/記憶體升級。