여러 Linux 서버에 로그인하고 ssh를 통해 여러 명령의 출력을 수집하는 bash 스크립트

여러 Linux 서버에 로그인하고 ssh를 통해 여러 명령의 출력을 수집하는 bash 스크립트

.gnu/linux 서버를 통해 로그인하고 다음 명령의 출력을 수집해야 합니다 SSH. 비밀번호 없는 인증을 해봤습니다 SSH. bash 스크립트를 사용하여 이 작업을 수행하고 싶습니다.

df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'

아래 명령을 시도했지만 "명령"을 인용하는 대신 df 단일 명령이 주어진 것처럼 작동하지만 다음과 같은 긴 명령을 제공합니다.

df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'

작동하지 않습니다..

답변1

'와 같은 병렬 SSH 도구를 사용하는 것이 좋습니다.충돌' 또는'PDSH'를 선택하면 출력이 더욱 우아해집니다.

서버 이름이 "host01"부터 "host09"까지라고 가정하면 명령은 다음과 같습니다.

clush -Bw host0[1-9] "df -lh | awk '{if (\$5 >= 20) { print \$6 \""  \"" \$2 "\"   \""  \$3  "\"  \"" \$5 }}';top -b -n1 | grep 'Cpu(s)' | awk '{print 100 - \$5}'"

탈출에 주의하세요.

답변2

1단계: 스크립트 작성

cat script.sh
df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'

2단계: scp호스트에게 보냅니다. (scp는 안전한 복사본입니다.) 호스트는 다음 위치에 있습니다.$h

scp script.sh $h:/tmp

3단계: 실행

ssh $h bash /tmp/script.sh

출력을 리디렉션할 수도 있습니다.

ssh $h bash /tmp/script.sh > result-$h.txt

답변3

별도의 스크립트 파일을 작성하지 않고 이 줄을 실행하려면 명령을 큰따옴표로 묶고 충돌할 수 있는 문자를 모두 이스케이프해야 합니다. 예를 들어:

ssh your-host "
df -lh | awk '{if (\$5 >= 20) { print \$6 \"  \" \$2 \"   \"  \$3  \"  \" \$5 }}'
top -b -n1 | grep \"Cpu(s)\" | awk '{print 100 - \$5}'"

또는 작은따옴표를 사용하세요.

ssh your-host'
df -lh | awk '"'"'{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'"'"'
top -b -n1 | grep "Cpu(s)" | awk '"'"'{print 100 - $5}'"'"

또는 여기 문서를 사용하세요.

ssh your-host "$(cat << 'END'
df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
END
)"

마지막 옵션은 더 많은 줄을 사용한다는 단점이 있지만 명령에서 아무것도 변경할 필요가 없습니다.

관련 정보