sudo 액세스 권한이 있는 사용자를 사용하여 800개의 서버(1, 2, 3 순서)에 원격으로 연결해야 합니다.
시스템 로그 상태 확인
- 실행 중인 경우 2단계로 이동합니다.
- d 서비스가 다시 시작되지 않는 경우
- 실행 중인 경우 2단계로 이동합니다.
/etc/sudoers
원격 컴퓨터에 들어가세요- 좋다
sudo echo "ABC" >> /etc/sudoers
- 좋다
스크립트에서 완료된 작업을 로컬 컴퓨터(스크립트를 실행 중인 곳)의 로컬 파일에 기록합니다.
원격으로 서비스를 시작하는 스크립트를 만들었습니다.
for i in `cat test1`
do
{
echo "********************************************$i***************************************************"
sshpass -p '<password>' ssh -t abc@$i "sudo /etc/init.d/httpd start
}
done
참고: 연결할 서버는 test1
파일 에 있습니다.
위 3가지를 하나의 스크립트로 통합하는 방법을 알려주세요.
답변1
800개의 서버는 관리할 것이 많습니다. 다른 솔루션을 살펴보는 것을 고려해야 합니다.
- 소금각 관리 시스템에서 마스터 서버와 미니언 프로세스를 사용합니다.
- 안시푸르이는 소금과 비슷합니다.
- 인형 다른 관리 소프트웨어
- 배포에 따라 원하는 모든 변경 사항이
deb
포함된 패키지로 작업한 다음 이를 리포지토리와 함께 배포할 수 있습니다.RPM
- 비슷한 데몬감시 장치또는v 실행시스템을 모니터링하고 syslogd 서비스가 실행 중인지 확인할 수 있습니다.
사이드 노트: 직접 편집은 /etc/sudoers
더 이상 모범 사례가 아닙니다. 대신 사용자 정의 파일을 배치하는 것을 고려 /etc/sudoers.d/
하고 다음을 /etc/sudoers
포함 해야 합니다.includedir /etc/sudoers.d
답변2
사용 중인 명령이 일반 쉘 명령에서 예상하는 올바른 반환 값을 구현하는 경우에만 다음과 같이 사용할 수 있습니다.
sshpass -p '<password>' ssh -t abc@$i "command to check syslog || command to restart service && command to add sudo entry" && local command
아이디어는 각 단계에서 올바른 반환 값에 의존한다는 것입니다. command to check syslog
실패 하면 실행하고 command to restart service
, 성공하면 실행합니다 command to add sudo entry
.
ssh 명령은 마지막 명령 실행의 값을 반환해야 하며, 괜찮으면 실행합니다 local command
.
물론 이것은 매우 조잡한 작업이므로 이러한 명령을 별도의 ssh 명령으로 분할하고 $?
매번 반환 값을 확인하여 문제를 터미널이나 로그 파일에 반영할 수 있다면 더 안정적일 것입니다.
답변3
필요한 모든 것을 포함하는 스크립트를 작성한 다음 SSH를 사용하여 원격 서버에서 실행하십시오.
ssh root@MachineB 'bash -s' < local_script.sh
스크립트는 로컬 스크립트처럼 실행됩니다.기계 B