여러 네트워크 장치에 자동으로 연결하고, 명령을 실행하고, 출력을 파일에 저장하는 방법은 무엇입니까?

여러 네트워크 장치에 자동으로 연결하고, 명령을 실행하고, 출력을 파일에 저장하는 방법은 무엇입니까?

약 1000개의 네트워크 장치에서 명령을 실행하고 출력을 파일에 저장해야 합니다. 파일에는 SSH를 사용하여 연결해야 하는 모든 네트워크 장치 이름이 나열되어 있습니다. 그런 다음 예를 들어 명령을 실행한 show interface description다음 출력을 파일에 저장해야 합니다. 이러한 장치는 모든 장치에서 동일한 공통 사용자 이름과 비밀번호로 설정됩니다. 따라서 기본적으로 목록 파일의 모든 장치에서 이러한 명령을 실행하려면 스크립트가 필요합니다.

ssh user@device1
password: passwordhere
user@device1> show interface description
user@device1> exit

그런 다음 모든 출력을 파일에 저장합니다. 저는 Red Hat Enterprise Server를 사용하고 있습니다.

답변1

자동화해야 할 가장 중요한 것은 ssh비밀번호를 입력하는 것입니다. 비밀번호 없이 설정 ssh하거나 설치하는 두 가지 방법을 시도해 볼 수 있습니다 sshpass.

  • 비밀번호를 입력하는데 사용됩니다 sshpass. 당신이 가지고 있다면DAG 저장소설정이 완료되면 yum을 사용하여 설치할 수 있습니다.

    yum install sshpass
    

    그렇지 않은 경우에도 할 수 있습니다.RPM을 직접 다운로드또는 저장소를 추가한 후 다음을 설치하십시오.

    1. rpmforge-release 패키지를 다운로드합니다. 아래 두 링크 중 하나를 선택하고 호스팅 아키텍처와 일치하는 링크를 선택하세요. 어떤 것을 사용해야 할지 확실하지 않은 경우 다음을 사용하여 스키마를 확인할 수 있습니다.uname -i

    2. DAG용 GPG 키 설치

      rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
      
    3. 다운로드한 패키지 설치

      rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
      
    4. 설치하다sshpass

      yum install sshpass
      

    일단 설치되면 각 줄에 장치의 이름이나 IP가 포함 sshpass된 파일이 주어지면 다음과 같이 프로세스를 자동화할 수 있습니다.ips.txt

    while read ip; do 
      echo -n "$ip: " >> local_file.log;
      sshpass -p 'your password' ssh user@$ip remote_command >> local_file.log
    done < ips.txt
    
  • ssh또는 각 장치에 비밀번호를 설정하지 않고 설치를 건너뛸 수도 있습니다 sshpass.

    1. 비밀번호 없이 설정ssh

      ssh-keygen -t rsa
      while read ip; do 
        ssh-copy-id -i ~/.ssh/id_rsa.pub user@$ip; 
      done < ips.txt
      
    2. 당신의 일을 실행

      while read ip; do 
        echo -n "$ip: " >> local_file.log;
        ssh user@$ip remote_command >>local_file.log
      done < ips.txt
      

답변2

몇 년 전 저는 원격 연결 자동화와 관련해 비슷한 문제에 직면했습니다. 나는 사용했다예상되는매우 유연한 도구이지만 때로는 사용하기가 약간 까다롭습니다. 사용자가 명령줄에 입력하여 수행할 수 있는 모든 작업을 수행하지만 시스템의 가능한 모든 반응은 스크립트로 식별할 수 있어야 합니다 expect(따라서 도구 이름: 놀라움을 좋아하지 않음).
그러나 이는 귀하의 문제에 큰 망치가 될 수 있으며 @erdon이 제안한 솔루션이 더 가볍고 더 적절할 수 있습니다.

답변3

이를 위해 Python 및 Paramiko 스크립트를 사용할 수 있습니다. 연결해서 미안하지만 여기에 스크립트를 게시했습니다."http://certifiedgeek.weebly.com/blog/network-scripting-via-ssh-with-python-and-paramiko"스크립트가 있는 곳"https://github.com/cwgueco/netscript"

"netscript.py" 스크립트에는 다음과 같은 옵션이 있습니다:

netscript.py -t <target> -u <username> -p <password> -i <command_file> -v
- the target is the IP address/hostname
- username/password should have allowed privilege to run commands
- command_file is a text file where the commands are listed
- v for verbose wherein you can pipe this to a file

각 장치에 연결하고 동일한 명령 세트를 실행하고 각 출력을 파일로 파이프할 때 이 Python 스크립트를 반복하는 스크립트를 생성하기만 하면 됩니다.

관련 정보