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
답변3
사용 이 매우 간단 ssh
하며 대부분의 시스템 관리자가 항상 사용합니다. 이 예에서는 3개의 원격 호스트와 1개의 활성 호스트가 있다고 가정합니다. 활성 항목은 host1
, 나머지는 host2
, host3
및 이라고 합니다 host4
. 그리고 사용자 이름은 모든 호스트에서 동일합니다 user1
.
SSH 키 쌍 생성(셸로 돌아갈 때까지 Enter를 누르기만 하면 됩니다):
user1@host1$ ssh-keygen -t rsa
공개 키 배포host2
, 및 :host3
host4
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