Introduzione
In questo documento viene descritto il problema su un router Cisco IOS® quando il protocollo SSH (Secure Shell) sul router a volte ha esito negativo con un errore di autenticazione dell'utente segnalato nei debug SSH. Questo problema si verifica anche se le credenziali utente immesse sono corrette e le stesse credenziali funzionano correttamente per Telnet.
Nota: Per rendere coerente il comportamento tra SSH e Telnet, consultare l'ID bug Cisco CSCum19502.
Problema
In questi debug si noti che, anche se l'opzione "debug aaa authentication" è abilitata, non vengono stampati debug di autenticazione, autorizzazione e accounting (AAA) per indicare che il processo AAA è stato effettivamente richiamato e restituisce l'errore.
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,
A volte il syslog mostrato di seguito viene osservato anche quando si cerca di eseguire SSH, ma non viene stampato in modo coerente:
*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
La causa principale del problema è una condizione di memoria insufficiente sul router. Quando il server AAA non riesce ad allocare memoria per creare l'ID univoco (UID) per la sessione SSH in arrivo, viene restituito lo stesso errore di un errore di autenticazione AAA, anche se non si tenta di eseguire il processo. Questa condizione si verifica quando la memoria libera del processore scende al di sotto della "soglia di memoria insufficiente per l'autenticazione" AAA, che per impostazione predefinita è impostata sul 3% della memoria totale e può essere controllata con il comando show aaa memory. Questo problema si verifica spesso su una piattaforma ASR (Aggregation Services Router) 1001 in cui la memoria sul router è limitata e che può essere esaurita in caso di uso elevato del control plane, ad esempio una tabella BGP (Border Gateway Protocol) completa. Sull'ASR 1001 sono installati 4 GB di DRAM, ma dopo l'avvio di tutte le altre CPU e processori Linux, Cisco IOS ottiene gli 1,1 GB rimanenti. Una volta esaurita la memoria al punto che AAA non può più allocare memoria per UID, SSH non funziona.
Considerare i seguenti dati di memoria da due 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
Da un semplice calcolo, sull'ASR non funzionante la percentuale di memoria libera è 1,28% (14914664 / 1160982064 * 100) della memoria totale disponibile. Sull'ASR funzionante è 3,51% (40860008 / 1160982064 * 100), che è appena al di sopra della soglia di memoria insufficiente per l'autenticazione.
Questo problema è difficile da identificare perché il messaggio %AAA-3-ACCT_LOW_MEM_UID_FAIL spesso non viene stampato quando si verifica questo errore a causa della condizione di memoria insufficiente. Inoltre, il modo in cui AAA calcola la soglia della memoria non dipende dalla quantità raw di memoria del processore disponibile sul processore di routing (RP), ma piuttosto da una percentuale della memoria totale. Pertanto, potrebbe essere ancora presente una quantità di memoria del processore indicata come libera nell'output del comando show memory summary quando questo si verifica senza errori di malloc segnalati.
Nota: L'ID bug Cisco CSCuj50368 è stato archiviato per rendere più espliciti i messaggi di errore SSH sulla causa reale dell'errore di autenticazione.
Un modo per verificare se questo è effettivamente il problema è guardare le statistiche della memoria 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 :
Se il numero di errori di ID univoco AAA aumenta a ogni tentativo SSH non riuscito, il problema è causato da questa condizione di memoria insufficiente.
Per risolvere questo problema, è necessario eseguire delle operazioni di risoluzione dei problemi di memoria ASR 1000 standard per isolare la causa. Per ulteriori informazioni su come risolvere i problemi relativi alla memoria sull'ASR, vedere Cenni preliminari sull'utilizzo della memoria.
Soluzione
Per risolvere questo problema, è necessario eseguire le procedure standard di risoluzione dei problemi relativi alla memoria del router. Le fasi isolano se il problema è dovuto all'uso normale, nel qual caso potrebbe essere garantito un aggiornamento della piattaforma/memoria; o una perdita di memoria in cui potrebbero essere necessari monitoraggio della memoria e risoluzione dei problemi. Per ulteriori informazioni, vedere Rilevatore di perdita di memoria e tecniche comuni di risoluzione dei problemi relativi alla memoria.
Per le versioni che non dispongono della funzionalità di correzione fornita dall'ID bug Cisco CSCum19502, la soluzione più ovvia è abilitare l'accesso Telnet o console al router, in quanto solo SSH è interessato da questa soglia.
Suggerimento: Il comando aaa memory threshold permette di ridurre i valori di soglia ad un minimo dell'1%. Tuttavia, anche se questo fornisce un modo temporaneo di connettersi al router SSH, può causare altre implicazioni, ad esempio il fatto che l'utilizzo della memoria del processore possa diminuire sensibilmente prima che gli amministratori vengano avvisati. Ciò potrebbe causare il blocco di processi più importanti, ad esempio BGP che utilizza grandi quantità di memoria. Pertanto, è necessario procedere con cautela.
Come spiegato in precedenza, è assolutamente plausibile che il router non perda memoria ma abbia solo una sottoscrizione eccessiva per le funzionalità abilitate. In questo caso potrebbe essere garantito un aggiornamento della piattaforma o della memoria.