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.