여러 컴퓨터에 프로그램을 배포하는 방법

여러 컴퓨터에 프로그램을 배포하는 방법

약 40대의 쿠분투 13.04 머신에 몇 가지 프로그램을 설치해야 하는데, 이를 최대한 효율적으로 수행하려면 어떤 옵션이 필요한지 알고 싶습니다.

편집: 리포지토리가 이미 설정되어 있고 컴퓨터는 LDAP 인증이나 중앙 집중식 서버 없이 모두 동일한 복제본입니다.

답변1

모든 구성 관리 소프트웨어가 이를 수행합니다. 그것이 바로 그것이기 위한 것입니다. 나는 Chef를 살펴볼 것을 제안합니다. 다음은 해당 웹페이지의 광고문입니다.

Chef는 인프라를 코드로 변환하는 자동화 플랫폼입니다. 물리적 서버와 가상 서버 측면에서 생각하지 마세요. Chef를 사용하면 실제 자산은 서버와 서버에서 제공하는 서비스를 구현하는 코드입니다. 자동화된 인프라는 출시 기간을 단축하고 규모와 복잡성을 관리하는 데 도움을 주며 시스템을 보호할 수 있습니다.

네트워크가 클라우드에 있든, 현장에 있든, 하이브리드에 있든 상관없이 Chef는 서버 5개, 5,000개 또는 500,000개를 관리하든 관계없이 서버와 애플리케이션을 구성, 배포 및 확장하는 방법을 자동화할 수 있습니다. Facebook 및 Amazon과 같은 회사가 미션 크리티컬 과제를 해결하기 위해 Chef를 선택한 것은 놀라운 일이 아닙니다.

이 영상이 많은 도움이 될 것입니다: http://www.youtube.com/watch?v=0UXh5EnFZrM

홈페이지: http://www.opscode.com/chef/

답변2

Rahul의 매우 좋은 답변을 확장하기 위해 다음 접근 방식을 사용하여 각 시스템에 대한 비밀번호 없는 액세스를 쉽게 설정할 수 있습니다.

  1. 설치하다sshpass로컬 컴퓨터에서:

    sudo apt-get install sshpass
    

    이렇게 하면 비밀번호를 명령줄 인수로 전달할 수 있습니다.

     sshpass -p '<password>' ssh user@server
    
  2. SSH 키 만들기

    ssh-keygen -t rsa
    

    빈 암호를 허용하면 작업을 단순화할 수 있습니다(이 답변의 나머지 부분에서는 그렇게 했다고 가정합니다. 보안 문제로 인해 이를 금지하는 경우 알려주시면 그에 따라 수정하겠습니다).

  3. 관심 있는 모든 IP와 해당 사용자 이름 및 비밀번호를 한 줄에 하나씩 포함하는 파일을 만듭니다.

    1.2.3.4 bob bobs_password
    11.22.33.44 hary harrys_password 
    

    이제 를 사용하여 sshpass키 파일을 복사하고 --빈 암호를 사용하는 한-- 모든 컴퓨터에 비밀번호 없이 액세스할 수 있도록 허용합니다.

    while read ip user pass; do 
      sshpass -p "$pass" ssh ssh-copy-id -i ~/.ssh/id_rsa.pub $user@$ip;
    done < ips.txt
    
  4. 이제 비밀번호 없는 액세스가 설정되었으므로 각 시스템에 소프트웨어를 설치하십시오(이는 을 $user실행할 수 있다고 가정합니다 apt-get. 기본적으로는 $user입니다 root).

     while read ip user pass; do 
       ssh $user@$ip "apt-get install package; 
     done < ips.txt
    

답변3

장기적인 목표를 위해

네트워크에서 실행되는 다양한 *nix 특성을 중앙 집중식으로 관리하고 구성의 모든 측면을 관리할 수 있는 자동화 도구를 원하는 경우 다음을 참조하세요.

  1. 인형
  2. 요리사
  3. cf엔진3

단기적인 목표를 위해

apt-get또는 를 통해 일부 패키지를 설치하기 위한 임시 솔루션을 원하는 경우 yum쉘이나 Perl, Python 스크립트를 사용할 수 있습니다.

이미 비밀번호 없는 인증을 설정한 경우 다음 스크립트를 사용할 수 있습니다.

#!/usr/bin/env bash

Servers_list=/opt/servers_list
PackageName="package-name"

for Host in $(< $Servers_list )
do
    echo "Installing package on $Host"
    ssh "${Host}"  apt-get -y install "${PackageName}"

done

비밀번호가 없는 인증이 없으면 Python에서 expect도구나 paramiko모듈을 사용할 수 있습니다.

관련 정보