概要
このドキュメントでは、アグリゲーションサービスルータ(ASR5500/ASR 5000)の管理IPへのセキュアシェル(SSH)接続が失われた場合のシナリオをトラブルシューティングする方法について説明します。
ASR5500ノードへのログインの問題
ASR5500パケットコアノードにログインできません。SSH接続は、ログインプロンプトなしですぐに終了します。Telnet接続の動作は類似しています。
トラブルシューティング手順
ステップ1:コンソール接続を使用してノードにログインします。
ステップ2:ほとんどの場合、接続障害の原因を示す可能性のある特定のSimple Network Management Protocol(SNMP)トラップは発行されません。
ステップ3:ログインに関連するログは、常にsyslogに表示されます。
evlogd: [local-60sec55.607] [tacacs+ 37201 error] [5/0/8908 <vpnmgr:1> authen_events.c:598] [software internal system critical-info syslog] Authentication failed for user **** on tty /dev/pts/0, application ssh, remote IP address XX.XX.XX.XX
evlogd: [local-60sec55.623] [cli 30028 debug] [5/0/8908 <vpnmgr:1> luser_auth.c:1448] [context: local, contextID: 1] [software internal system syslog] Login attempt failure for user **** IP address XX.XX.XX.XX - Access type ssh/sftp
evlogd: [local-60sec53.652] [tacacs+ 37201 error] [5/0/8908 <vpnmgr:1> authen_events.c:598] [software internal system critical-info syslog] Authentication failed for user **** on tty /dev/pts/0, application ssh, remote IP address XX.XX.XX.XX
evlogd: [local-60sec53.679] [cli 30028 debug] [5/0/8908 <vpnmgr:1> luser_auth.c:1448] [context: local, contextID: 1] [software internal system syslog] Login attempt failure for user **** IP address XX.XX.XX.XX - Access type ssh/sftp#####
evlogd: [local-60sec2.942] [tacacs+ 37201 error] [5/0/8908 <vpnmgr:1> authen_events.c:598] [software internal system critical-info syslog] Authentication failed for user epcats on tty /dev/pts/0, application ssh, remote IP address YY.YY.YY.YY
ステップ4:コマンドshow crash list allは、最近のクラッシュを表示します。vpnmgrに関連するクラッシュが特に重要であることに注意してください。
ステップ5:コマンドshow task resources allを実行すると、vpnmgrおよびsshdプロセスが過状態でいないことを確認できます。vpnmgrは、IPアドレスプール管理を担当し、コンテキスト固有のすべての操作を実行します。sshdはStarOS CLIへのセキュアログインをサポートしています。
ステップ6:vpnmgrインスタンス1の再起動。は、場合によっては最小限の影響でSSH接続を取得するのに役立ちます。ただし、しばらくすると接続が終了する場合があります。
ステップ7:MIOスイッチオーバーによって問題が解決されます。プロセスがしきい値または過負荷状態に達する可能性があるシナリオでは、MIOバウンスが解決に役立つことがあります。
回避策は、MIOスイッチオーバーです。次のセクションでは、根本原因分析の手順について説明します。
根本原因分析
- show administratorsコマンドを使用して、ノード上のアクティブな接続数を確認します。ただし、出力に過剰な数のアクティブセッションが表示されず、ノードへの接続が記録される可能性があります。
出力例:
[local]ASR5500-2# show administrators
Monday September 06 13:15:07 CDT 2021
Administrator/Operator Name M Type TTY Start Time Mode Idle
------------------------------ - ------- -------------- ------------------------ ------------ ----
admin admin /dev/pts/4 Mon Sep 06 13:14:38 2021 Context User 29
admin admin /dev/pts/3 Mon Sep 06 12:21:13 2021 Context User 749
admin admin /dev/pts/2 Thu Sep 02 11:03:57 2021 Context User 342206
[local]ASR5500-2#
- さらに、次のコマンドを実行し、問題を掘り下げます。隠しモードからデバッグシェルに移動します。
cli test-command pass <password>
debug shell
debug shellで次のコマンドを実行します。
ps -ef
setvr 1 bash
netstat -n
ps:プロセスを一覧表示します。psコマンドを使用すると、システム上の現在のプロセスに関する技術情報を表示したり、そのステータスを確認したりできます。
-e:ユーザに関係なく、すべてのプロセスを表示します。
-f:プロセスを詳細な形式で表示します。
netstatコマンドは、ノードに存在するすべてのソケット接続を表示するために使用される、最も便利なコマンドラインオプションの1つです。UNIX接続だけでなく、すべてのtcpおよびudpソケット接続をリストする機能も備えています。このCLIを使用して、接続の確立を待ち続ける可能性のあるリスニングソケットをリストアップすることもできます。
出力例:
ASR5500-2:card5-cpu0# ps -eF
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 511 640 4 Aug20 ? 00:00:13 init [5]
root 2 0 0 0 0 2 Aug20 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 0 Aug20 ? 00:00:00 [ksoftirqd/0]
root 6 2 0 0 0 0 Aug20 ? 00:00:00 [migration/0]
root 7 2 0 0 0 0 Aug20 ? 00:00:01 [watchdog/0]
root 8 2 0 0 0 1 Aug20 ? 00:00:00 [migration/1]
root 10 2 0 0 0 1 Aug20 ? 00:00:00 [ksoftirqd/1]
root 11 2 0 0 0 0 Aug20 ? 00:00:31 [kworker/0:1]
root 12 2 0 0 0 1 Aug20 ? 00:00:00 [watchdog/1]
root 13 2 0 0 0 2 Aug20 ? 00:00:00 [migration/2]
root 15 2 0 0 0 2 Aug20 ? 00:00:00 [ksoftirqd/2]
root 16 2 0 0 0 2 Aug20 ? 00:00:00 [watchdog/2]
root 17 2 0 0 0 3 Aug20 ? 00:00:00 [migration/3]
root 19 2 0 0 0 3 Aug20 ? 00:00:00 [ksoftirqd/3]
root 20 2 0 0 0 3 Aug20 ? 00:00:00 [watchdog/3]
root 21 2 0 0 0 4 Aug20 ? 00:00:00 [migration/4]
root 22 2 0 0 0 4 Aug20 ? 00:00:00 [kworker/4:0]
root 23 2 0 0 0 4 Aug20 ? 00:00:00 [ksoftirqd/4]
……………………………
ASR5500-2:card5-cpu0# setvr 1 bash
bash-2.05b# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.201.211.23:22 10.227.230.222:51781 ESTABLISHED
tcp 0 0 10.201.211.23:22 10.24.28.55:49918 ESTABLISHED
tcp 0 0 10.201.211.23:22 10.99.10.148:54915 ESTABLISHED
tcp 0 0 10.201.211.23:22 10.227.230.222:51783 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 39221385
unix 2 [ ] DGRAM 27056
bash-2.05b# exit
前述のレポートによると、サーバはASR55Kボックスへの接続を開始するスクリプトを実行しました。これらのサーバは、スタックまたはアイドル状態にあるこれらの接続の多くを開きましたが、閉じられませんでした。
TeleTypeWriter(TTY)接続が終了した後も、TCP接続はゲートウェイ上でアクティブなままです。
これらの接続の結果、ASR5500は許可されるSSH接続の最大数に達し、ボックスへの接続を妨げています。サーバにログインして親プロセスを強制終了すると、すべての接続が即座に解放され、SSHがすぐに復元されます。
これらのアイドル状態のSSH接続は、TeleTypeWriter(noTTY)接続として確立されます。このようなnoTTY接続は、出力が表示されないように接続されたプログラムで使用されます。
SSH admin@asr55k hostname "display version"などのコマンドは、ほとんどの場合、noTTY接続を確立します。
同様に、SSH:*@nottyは、シェルや擬似端末などのビジュアル端末が割り当てられていないゲートウェイ(GW)へのSSHログインがあることを示します。この問題は、スクリプト関連のさまざまな操作(特にFTP/Secure Copy(SCP)接続を使用している場合)で発生する可能性があります。
提案するソリューション
- APIサーバに使用できるスクリプトにタイムアウトを実装します。複数のCLIを実行する複数のSSH接続は、すべてのsessmgrプロセスでメッセンジャー輻輳と重要なCPU使用率を生成する可能性があります。
- トラブルシューティングを簡単にするには、次のオプションを設定します。
logging filter runtime facility cli level debug critical-info
- この設定をノードに適用します。このコマンドは、アイドル状態のSSHセッションを5分後に終了するために使用されます。これは、サーバによって引き起こされる古いセッションに対する保護メカニズムとして使用されます。
Exec > Global Configuration > Context Configuration
configure > context context_name
administrator encrypted password timeout-min-absolute 300 timeout-min-idle 300
関連情報