루프에서 여러 서버에 로그인하는 방법

루프에서 여러 서버에 로그인하는 방법

script.sh라는 스크립트가 있습니다. 나는 그것을 호스트1, 호스트2 등과 같은 다른 컴퓨터에서 실행하고 싶습니다. 사용자 이름과 비밀번호를 전달하여 각 서버를 어떻게 반복할 수 있나요?

답변1

키 없이 여러 서버를 반복하려면 일반 텍스트 또는 단순히 암호화된 비밀번호가 포함된 파일을 반복해야 합니다. 특히 프로덕션 환경에서는 이 작업을 직접 수행하지 않는 것이 좋습니다.


경고 - 권장하지 않습니다

sshpass서버 호스트 이름과 비밀번호가 포함된 텍스트 파일을 사용하면 빠르고 복잡한 솔루션을 얻을 수 있습니다 .

serverList.txt 예:

server1 password1
server2 password2

진짜안전하지 않은 스크립트의 예:

for host in $(awk '{print $1}' serverList.txt); do
    password=$(grep -w "$host" serverList.txt | awk '{print $2}')
    sshpass -p "$password" ssh $host < ./script.sh
done

이것이 내가 제안하는 것입니다:

이것이 정기적으로 수행해야 하는 작업이라면 dsh(분산 쉘)을 살펴보는 것이 좋습니다.

설치하다

Debian/Ubuntu에서 설치하는 것은 간단합니다:

sudo apt-get install dsh

RHEL 기반 배포판의 경우 libdshconfig먼저 컴파일한 후 다음을 수행해야 합니다 dsh.

# libdshconfig
wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.10.cvs.1.tar.gz
tar xfz libdshconfig*.tar.gz 
cd libdshconfig-*
./configure ; make
make install

# dsh
wget http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.22.0.tar.gz
tar xfz dsh-0.22.0.tar.gz
cd dsh-*
./configure ; make 
make install

구성

dsh기본적으로 구성은 rsh로그인 프로토콜로 사용됩니다. 이를 암호화되지 않음 ssh으로 변경할 수도 있습니다 rsh.

를 통해 설치한 경우 apt구성 파일은 다음과 같습니다 /etc/dsh/dsh.conf. - RHEL 기반 배포용으로 컴파일해야 하는 경우 구성 파일은 다음과 같습니다./usr/local/etc/dsh.conf

이것을 업데이트하세요:

remoteshell =rsh

이와 관련하여:

remoteshell =ssh

이 작업을 완료하면 프로그램을 실행할 컴퓨터 목록이 필요합니다. 데비안의 경우 파일은 이고 /etc/dsh/machines.list, RHEL의 경우 파일은 다음과 같습니다./usr/local/etc/dsh/machines.list

목록은 줄 바꿈으로 구분된 호스트 이름, IP 또는 FQDN 형식일 수 있습니다. 예를 들어 machines.list모든 호스트 이름이나 FQDN이 확인된 경우 다음은 유효한 파일입니다.

10.20.30.40
10.20.30.31
server1.stackexchange.com
server2
root@myOtherServer

이제 여러 호스트에서 명령을 순차적으로 또는 병렬로 실행할 수 있습니다.machines.list

다음으로 출력만 반환됩니다.

dsh -a <command>

$ dsh -a echo hello
hello
hello

각 호스트 이름을 해당 출력의 접두어로 인쇄합니다.

dsh -a -M <command>

$ dsh -a -M echo hello
root@server1: hello
root@server2: hello

동일한 작업을 수행하되 순차적으로 수행하는 대신 명령을 동시에 실행하십시오.

dsh -aMc <command>

선택한 호스트만 사용:

dsh -Mc -m <host1> -m <host2> <command>

지침

따라서 귀하의 시나리오에서 문제는 SSH 키를 설정해야 하고(각 호스트에 대해 비밀번호를 입력하려는 경우가 아니면) 각 호스트에도 스크립트가 필요하다는 것입니다.

개인적으로 나는 이것이 스크립트의 크기에 따라 실행하는 가장 좋고 가장 안전한 방법이라고 생각합니다. SSH를 통해 각 호스트에 스크립트를 전달할 필요가 없기 때문에 모두 로컬에서 스크립트를 실행할 수 있습니다.

답변2

여러 컴퓨터에서 스크립트를 실행하려면 를 사용하는 것이 좋습니다. parallel이 도구는 귀하의 요구 사항에 완벽하게 적합합니다.

튜토리얼 보기여기그리고여기.

답변3

사용 이 매우 간단 ssh하며 대부분의 시스템 관리자가 항상 사용합니다. 이 예에서는 3개의 원격 호스트와 1개의 활성 호스트가 있다고 가정합니다. 활성 항목은 host1, 나머지는 host2, host3및 이라고 합니다 host4. 그리고 사용자 이름은 모든 호스트에서 동일합니다 user1.

SSH 키 쌍 생성(셸로 돌아갈 때까지 Enter를 누르기만 하면 됩니다):

user1@host1$ ssh-keygen -t rsa

공개 키 배포host2, 및 :host3host4

user1@host1$ for i in {2..4}; do ssh-copy-id user1@host$i;done
user1@host2 password:
user1@host3 password:
user1@host4 password:

스크립트 통과에서 host1:

user1@host1$ for i in {2..4}; do scp script.sh user1@host$i:/home/user1 ;done

스크립트 실행에서 host1:

user1@host1$ for i in {2..4}; do ssh user1@host$i 'sh script.sh'; done

관련 정보