저는 매우 큰 네트워크를 조사하고 목록을 작성하는 임무를 맡았습니다. 특히 1000개 이상의 Avaya 스위치 및 라우터에 대한 일련 번호를 얻어야 합니다. 이 모든 것은 내 워크스테이션에서 텔넷이나 SSH를 통해 액세스할 수 있습니다. 거의 모든 서비스는 동일한 사용자 이름과 비밀번호를 사용하여 액세스할 수 있습니다. 일부는 텔넷 액세스만 가능하고 일부는 SSH 액세스만 가능합니다.
로그인 후 다음과 같은 일련번호를 얻을 수 있습니다.
en[crlf]
(cli 명령 모드 활성화)
show tec[crlf]
(장치의 기술 정보를 반환합니다)
[3x spacebar]
(일련번호가 표시되는지 확인하기 위해)
q
(더 많은 데이터 표시를 중지하고 cli
프롬프트로 돌아갑니다)
exit[crlf]
(터미널 세션 종료)
생성된 출력에서 일련번호를 찾을 수 있습니다.
그래서 제 질문은 bash 스크립트나 이와 유사한 스크립트에서 이를 자동화하여 주어진 장치 IP 주소를 기반으로 일련 번호 목록을 생성하는 것입니다.
이상적으로 스크립트는 다음을 수행해야 합니다.
1. 파일에서 장치의 IP 주소를 읽습니다.
2. SSH 자격 증명 1을 사용하여 로그인을 시도합니다. (실패할 경우 자격 증명 2를 시도하십시오.)
3. 실패한 경우 Telnet 자격 증명 1(실패한 경우 자격 증명 2 시도)
4. 모두 실패하면 출력 파일에 "login failed"를 기록합니다.
5. 성공하면 장치 IP 주소와 일련 번호를 출력 파일에 씁니다.
6. 목록의 다음 장치 IP에 대해 반복합니다.
7. 이 경우 일반 텍스트 사용자 이름과 비밀번호를 사용하는 것은 문제가 되지 않습니다.
내 워크스테이션에서 최신 Ubuntu Linux를 사용하고 있습니다.
누군가가 이 작업을 수행하는 데 조언을 해줄 수 있기를 바랍니다. 1000개의 스위치에 수동으로 로그인하고 싶지 않습니다.
답변1
대화형 CLI 프로세스를 자동화하려면 "Expect" 또는 그 대안을 사용할 수 있습니다.https://en.wikipedia.org/wiki/Expect. 가장 간단한 Expect 스크립트 예:
spawn telnet foo.bar.com
expect ogin {send luser\r}
expect assword {send TopSecret\r}
send "who am i\r"
send "exit\r"
expect eof