여러 서버에서 동일한 명령을 실행하는 방법

여러 서버에서 동일한 명령을 실행하는 방법

클러스터로 작동하는 4개의 Suse 서버가 있습니다. 이름 CS-1 CS-2 CS-3 CS-4

CS-1에서는 CS-2 CS-3 CS-4에 직접 SSH를 통해 연결할 수 있습니다(ssh CS-2, ssh CS-3, SSH CS-4). CS-2에서는 CS-1 CS-에 직접 SSH를 통해 연결할 수 있습니다. 3 CS-4(ssh CS-1, SSH CS-3, SSH CS-4)

이 4개의 서버 모두에서 3개의 명령을 실행해야 합니다.

sed 's/aes128-ctr/aes129-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes130-ctr/aes131-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes132-ctr/aes133-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config

쉘 스크립트에서 이를 어떻게 수행합니까?

답변1

이를 수행하는 방법에는 여러 가지가 있습니다.

이것이 정기적으로 수행할 수 있는 작업이라면 다음을 살펴보는 것이 좋습니다.안시푸르또는 기타 유사한 자동화 도구.

이것이 일회성인 경우 아마도 가장 간단한 접근 방식은 이러한 명령을 스크립트에 복사하고 scp스크립트를 원격 시스템에 복사한 다음 다음을 사용하여 원격으로 실행하는 것입니다 ssh.

$ for host in cs-{2..4}; do scp my-script.sh myuser@"$host":; ssh -t $host "sudo ./my-script.sh"; done

그런데 명령에 자신이 있다면 sed수동으로 임시 파일을 작성하고 새 파일을 복사하는 대신 다음을 수행할 수 있습니다.

sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config

이는 명령이므로 각 호스트에 대해 간단히 다음을 수행할 수 있습니다.

$ ssh user@host "sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config"

답변2

일부 서버에서 동일한 명령을 실행해야 하는 경우자주pssh, 동일한 도구 및 관련 도구를 살펴보는 것이 좋습니다..

~50개의 원격 호스트를 제어해야 하는 랩톱에서 수행한 작업(ssh 설정은 이미 키 인증을 사용함):

  1. 호스트 이름 목록을 만듭니다. 예를 들어 ~/.dev-hosts.list이 목록에는 호스트 이름만 있습니다.
dev-host1
dev-host2
...
  1. date목록의 각 호스트에서 다음 명령을 실행합니다.

pssh -h ~/.dev-hosts.list -l developer -i date

  1. 임의로 선택할 수 있는: 편의를 위해 모든 것을 별칭으로 묶습니다: alias run.on.dev='pssh -h ~/.dev-hosts.list -l username'. 나중에 date이러한 머신에서 실행하고 출력을 얻으려면 몇 가지 키 입력만 하면 됩니다.

run.on.dev -i date

분명히 이 방법으로 귀하의 경우를 포함하여 거의 모든 명령을 실행할 수 있습니다 sed.

이를 통해 -lSSH를 통해 이러한 호스트에 연결하기 위한 사용자 이름을 지정할 수 있으며 -i명령으로 생성된 출력을 볼 수 있습니다.

관련 정보