파일을 사용하는 SSH 스크립트

파일을 사용하는 SSH 스크립트

내 시스템에 원격으로 액세스하기 위해 다음 스크립트를 사용했습니다.

#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done

HOSTS 작성= 번거로워짐

텍스트 파일에서 호스트를 읽고 싶습니다. 이 스크립트가 작동하도록 하려면 어떻게 수정해야 합니까?

감사해요.

답변1

수정은 매우 간단합니다. 한 줄에 하나의 호스트 이름이 있는 파일이 있다고 가정하면 필요한 것은 다음과 같습니다.

#!/bin/bash
username=someUser
script="pwd; ls"
while read -r hostname; do
    ssh -n -l "$username" "$hostname" "$script"
done < "$1"

그런 다음 해당 파일을 인수로 사용하여 스크립트를 실행합니다.

script.sh /path/to/hosts/file

변수를 소문자로 변경했습니다. 쉘 변수에 대문자를 사용하는 것은 일반적으로 나쁜 생각입니다. 관례적으로 전역 환경 변수는 대문자이므로 이름 충돌로 인해 예기치 않은 동작이 발생할 수 있기 때문입니다. 이는 일반적으로 환경에 이미 정의되어 있는 HOSTNAME표준 변수 이름(예: 및 )을 사용할 때 특히 중요합니다 .USERNAME

또한 파일의 나머지 부분을 읽으려는 시도를 -n차단하려면 여기에 옵션이 필요합니다 . ssh그렇지 않은 경우 명령이 표준 입력의 나머지 부분을 소비하여 전체 파일을 읽게 되므로 -n첫 번째 반복만 작동합니다 .ssh

관련 정보