소개
이 문서에서는 SSH(Secure Shell) 연결이 Aggregation Services Router(ASR5500/ASR 5000)의 관리 IP에 손실된 경우 시나리오를 해결하는 방법에 대해 설명합니다.
ASR5500 노드에 대한 로그인 문제
ASR5500 패킷 코어 노드에 로그인할 수 없습니다. SSH 연결은 로그인 프롬프트 없이 즉시 종료됩니다. 텔넷 연결은 유사한 동작을 나타냅니다.
문제 해결 단계
1단계. 콘솔 연결을 통해 노드에 로그인을 시도합니다.
2단계. 대부분의 경우 연결 오류의 원인을 가리킬 수 있는 특정 SNMP(Simple Network Management Protocol) 트랩이 발행되지 않습니다.
3단계. 로그인과 관련된 로그는 syslogs에 지속적으로 존재합니다.
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은 최근 crash를 표시합니다. vpnmgr과 관련된 충돌은 특히 중요합니다.
5단계. show task resources 명령은 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
디버그 셸에서 다음 명령을 실행합니다.
ps -ef
setvr 1 bash
netstat -n
ps - 프로세스를 나열합니다. ps 명령을 사용하면 시스템의 현재 프로세스에 대한 기술 정보를 보고 상태를 확인할 수 있습니다.
-e - 사용자와 상관없이 모든 프로세스를 표시합니다.
-f - 프로세스를 상세 형식으로 표시합니다.
netstat 명령은 노드에 있는 모든 소켓 연결을 표시하는 데 사용되는 가장 편리한 명령줄 옵션 중 하나입니다. 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 상자에 대한 연결을 생성한 스크립트를 실행했습니다. 이러한 서버는 이러한 연결 중 많은 것을 열었는데 연결이 끊겼거나 유휴 상태였지만 닫히지 않았습니다.
TTY(TeleTypeWriter) 연결이 종료된 후에도 TCP 연결은 게이트웨이에 활성 상태로 유지됩니다.
이러한 연결의 결과로 ASR5500은 허용되는 최대 SSH 연결 수에 도달하여 박스 연결을 방해했습니다. 서버에 로그인하여 상위 프로세스를 종료하려고 하면 모든 연결이 즉시 해제되고 SSH가 즉시 복원됩니다.
이러한 유휴 SSH 연결은 TeleTypeWriter(noTTY) 연결이 없는 것으로 설정됩니다. 이러한 noTTY 연결은 출력이 표시되지 않는 방식으로 연결된 프로그램에서 사용됩니다.
SSH admin@asr55k 호스트 이름 "display version"과 같은 명령은 대부분의 경우 noTTY 연결을 설정합니다.
마찬가지로 SSH와 같은 명령문은 다음과 같습니다. *@notty은 셸 또는 유사 터미널 같은 시각적 터미널이 할당되지 않은 GW(Gateway)에 SSH 로그인이 있음을 나타냅니다. 이는 특히 FTP/SCP(Secure Copy) 연결을 사용하는 경우 다양한 스크립트 관련 작업 중에 발생할 수 있습니다.
솔루션 제안
- API 서버에 사용할 수 있는 스크립트에 시간 제한을 구현합니다. 여러 CLI를 실행하는 여러 SSH 연결을 통해 메신저 혼잡 및 모든 sessmgr 프로세스에서 상당한 CPU 사용량을 생성할 수 있습니다.
- 더 쉽게 문제를 해결할 수 있도록 이 옵션을 구성합니다.
logging filter runtime facility cli level debug critical-info
- 이 컨피그레이션을 노드에 적용합니다. 이 명령은 5분 후 유휴 SSH 세션을 종료하는 데 사용됩니다. 이는 서버에 의해 발생하는 오래된 세션에 대한 보호 메커니즘으로 사용됩니다.
Exec > Global Configuration > Context Configuration
configure > context context_name
administrator encrypted password timeout-min-absolute 300 timeout-min-idle 300
관련 정보