Linux-한 번에 여러 시스템에서 동일한 명령 실행


39

때때로 같은 명령을 실행해야하는 약 12 ​​개의 Linux 상자가 있습니다. 각 머신에 로그온하고 한 번에 하나씩 명령을 실행하는 것 외에는 더 쉬운 방법 (또는 자동화 된 방법)이 있습니까? 항상 같은 명령이 아니며 사전 설정된 시간이 아니기 때문에와 같은 도구에는 이상적이지 않습니다 cron.



마지막으로 정식 목록 :)
rogerdpack

답변:


12

흠, 아마도 pconsole 이 당신이 원하는 도구 일 것입니다.


와우, pconsole은 꽤 멋져 보입니다! 나는 그것을 아무 문제없이 설치했고 지금까지 훌륭해 보입니다. 감사!
Chris Bunch

내가 좋아하는 도구 중 하나입니다. :) np
Node


8

여기에서 Puppet을 확인 하고 설정 및 사용에 관한 linux.com 기사 가 있습니다.


1
흠, 꼭두각시가 꽤 재미있어 보인다. pconsole이 이미 실행 중이고 Puppet의 언어를 배우는 것보다 쉽기 때문에 pconsole이 실패하면 시작해 보겠습니다. 그래도 제안에 감사드립니다!
Chris Bunch

특히 Marionette Collective 도구 (mcollective 또는 mco라고도 함). 꼭두각시 사실에 따라 호스트 그룹에서 작업을 수행 할 수 있도록하는 꼭두각시의 일부입니다.
Brian Minton 2012 년


8

Capistrano 시도해보십시오 . 원래는 Rails 배포 도구이지만 원격 시스템으로 많은 일을 수행했습니다.

여러 머신의 관리에 대한보다 완벽한 접근을 위해서는 Chef 를 사용해보십시오 .



6

사람들이 좋아하는 Stack Overflow에서 내 대답을 복사하여 붙여 넣을 것 같습니다. . .


한 번에 여러 서버에서 명령을 실행하는 방법의 문제는 다른 날 펄 메일 링리스트에 와서 나는 같은 추천주지 내가 거기에 준 사용 GSH이다 : http://outflux.net/unix/를 소프트웨어 / gsh

gsh는 for box in box1_name box2_name box3_name이미 제공된 " "솔루션 과 유사 하지만 gsh가 더 편리하다는 것을 알았습니다. 서버를 포함하는 / etc / ghosts 파일을 web, db, RHEL4, x86_64와 같은 그룹 또는 그 밖의 다른 (man ghosts) 그룹으로 설정 한 다음 gsh를 호출 할 때 해당 그룹을 사용합니다.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

예를 들어 web + db 또는 web-RHEL4를 사용하여 고스트 그룹을 결합하거나 분할 할 수도 있습니다.

또한 shmux를 사용한 적이 없지만 웹 사이트 에는 많은 서버에서 한 번에 명령을 실행할 수있는 소프트웨어 목록 (gsh 포함)이 포함되어 있습니다. Capistrano 는 이미 언급되었으며 (내가 이해 한 것에서) 그 목록에도 올 수 있습니다.


5

KDE 데스크탑에있는 경우, konsole 에는 "모든 세션에 입력 보내기"옵션이 있습니다. 동일한 곤솔 창에서 열린 모든 세션에 적용됩니다.


5

시도한 ssh [user@]hostname [command]다음 호스트 이름을 반복 할 수도 있습니다.


2
이것은 실제로 "한 번에"부분을 만족 시키지는 않지만 (병렬화되지 않고 직렬화되어 있음), 질문의 본문에서 요구되는 것 같지 않은 것도 괜찮은 해결책 일 수 있습니다.
voretaq7

4

func도 살펴보십시오. Func는 모듈 아키텍처를 사용하여 패키지 처리, 명령 실행 등 시스템의 다양한 측면을 제어 할 수 있습니다. SSL을 통한 클라이언트 / 서버 모듈에서 작동하며 상당히 유연한 인증 체계를 가지고 있습니다.


이와 함께 Func는 Red Hat에 의해 구축되고 있으며 향후 Fedora / RHEL 제품에서 더 많이 사용될 것으로 보입니다. 이 유형의 문제에 대한 사실상의 표준 솔루션이 될 것으로 기대하기 때문에 이것은 분명히 지켜봐야 할 것입니다.
Christopher Cashell

4

ClusterSSH를 사용했으며 작동합니다. 그러나 특정 수의 터미널을 넘어 서면 확장 성이 떨어집니다.

아무도 xargs를 언급하지 않은 것에 놀랐습니다. Xargs는 대부분의 경우에 적합합니다. 사실, 나는 더 이상 clusterssh를 사용하지 않을 정도로 편안해졌습니다.

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(모든 웹 호스트에서 아파치를 다시 시작하십시오.)


추종자를 들어, -P30일부 수단은 "병렬로 30를 실행"
rogerdpack

4

이미 tmux 사용자 인 경우 tmux-cssh (의 약자)를 즐길 수 있습니다 TMUX-C(luster)-SSH. 서버 이름 목록을 제공하고 자체 분할 창의 각 서버에 SSH 세션이 열린 새 tmux 창을 엽니 다. 모든 키 입력이 각 창에 복사됩니다. 호스트 수에 따라 출력을 읽기 어려울 수 있습니다.


1
하나의 라이너 링크가 반드시 유용한 것은 아닙니다. 설명해주세요. 이 도구를 추천하는 이유는 무엇입니까?
사슴 사냥꾼

3

다른 도구는 다음과 같습니다.

RunDeck은 가벼운 ControlTier로 묘사 될 수도 있습니다.

이러한 도구는 클러스터 셸뿐만 아니라 웹 프런트 엔드를 제공하며 나중에 사용하기 위해 작업을 저장할 수 있습니다.


2

클러스터 SSH (cssh)를 시도 할 수도 있습니다. 나는 그것을 사용하지는 않았지만 LinuxJournal.com에는 "여러 서버를 효율적으로 관리"라는 기사가 있습니다.


1

간단하고 강력한 요리를 사용하십시오 ! 이 스크립트는 내 인생을 바꿨습니다.

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

diligence shell 'dish'는 여러 시스템에서 ssh / rsh / telnet / mysql을 통해 동시에 명령을 실행합니다. 그러면 수백 개의 노드에서 비밀번호 변경, 구성 업데이트, 파일 복사, 상태 확인 등이 간단 해집니다. Dish는 IBM의 'dsh'(분산 쉘)와 유사하지만 인증이 필요한 명령을 원격으로 실행할 수 있습니다. ClusterIt, 댄서의 쉘, 병렬 분산 쉘 또는 C3과 같은 분산 쉘 (또는 유사한 툴)을 포함하는 다른 오픈 소스 패키지와 비교할 때 접시는 유연한 솔루션이 필요한 경우 슬림하고 사용하기 쉬운 원격 쉘 래퍼입니다. 요리 매뉴얼 페이지를 온라인으로 검색 할 수 있습니다.


1

다음은 다른 답변에서 언급 한 명령을 사용하는 몇 가지 예입니다.

pdsh

숫자 범위를 취할 수 있으며 호스트 이름이 먼저 출력되면 실제로 유지 관리되는 것처럼 보입니다 .

가장 간단한 버전 :

pdsh -w hostname echo done

산출:

hostname: done

더 복잡한 예 :

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

산출:

hostname8: done
hostname7: done
otherhost: done

맥: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

그렇지 않으면 원격 쉘 설정이 필요합니다. 그렇지 않으면 "rsh"를 사용하거나 사용하지 못할 수도 있습니다.

맥: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

선택적으로 파일에서 머신 목록을 모두 가져올 수 있습니다.

여기에 더 많은 예제를 추가하십시오. 커뮤니티 위키입니다.

맥: brew install pssh

클러스터 SSH

클러스터 SSH ( "mac only version"은 다른 두 버전이있는 것 같습니다 )는 실제로 다른 터미널에 입력을 보내는 큰 터미널이있는 "실제 터미널"을 실제로 엽니 다. 여러 UI로 보내는 UI와 같습니다.

전의:

csshX hostname0[1-2] hostname3 그런 다음 빨간색 상자에 입력하면 각 터미널 창 (호스트 당 하나씩)으로 이동하여 팝업됩니다.

맥 : brew install csshx(이전 버전이지만 여전히 작동)

도있다 brew install ansibleFWIW는

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.