1 minute read

라즈베리파이 여러서버 명령스크립트

ssh 개요

: 라즈베리파이에 구축한 Apache 1대 & Tomcat 2대 서버로 한번에 명령어를 수행한다.

ssh 명령어
다른 서버로 붙을 수 있는 명령어.
현재 나도 스마트폰 ssh로 각 서버에 붙어서 작업하고 있으며, 이번에는 스마트폰을 통해 붙은 리눅스 안에서 다시 ssh 명령어를 수행하는 차이일뿐 기능의 본질은 똑같다.

ssh 스크립트

: 여러 서버에 ssh 명령어를 나열한 스크립트를 생성한다.

WEB 서버

: 여러 서버를 핸들링할 주체가되는 서버에서 스크립트 작성한다. 나는 WEB 서버에서 명령을 내릴것이므로 WEB서버 안에 작성했다.

  # 여러 서버들에게 ssh 핸들링하는 WEB서버안에 작성함.
  vi ~/script/dbd/server_hostname.sh
  
  #!/bin/bash
  echo "웹1.... >>>"  
  sudo ssh 웹서버계정@blang.co.kr -p [웹서버포트] sudo hostname -I  
  echo ""
  echo "와스1.... >>>"  
  sudo ssh 와스서버1계정@blang.co.kr -p [와스1서버포트] sudo hostname -I  
  echo ""
  echo "와스2.... >>>"  
  sudo ssh 와스서버2계정@blang.co.kr -p [와스2서버포트] sudo hostname -I  

WAS 서버1

: WEB 서버에서 핸들링당하는 WAS1 서버이다. 실행하는 계정에 sudo 명령어 권한을 부여한다.

  sudo vi /etc/sudoers

  # User privilege specification
  root        ALL=(ALL:ALL) ALL
  WAS1서버계정  ALL=(ALL:ALL) ALL  #권한부여 추가

WAS 서버2

: WEB 서버에서 핸들링당하는 WAS2 서버이다. 실행하는 계정에 sudo 명령어 권한을 부여한다.

  sudo vi /etc/sudoers

  # User privilege specification
  root        ALL=(ALL:ALL) ALL
  WAS2서버계정  ALL=(ALL:ALL) ALL  #권한부여 추가

테스트

: 위와 같이 만들고 테스트해보면 에러가 발생한다.

  sh ~/script/dbd/server_hostname.sh
  

  # 에러가 발생했다.
  # /etc/sudoers에 해당 계정의 권한을 설정했음에도, 아래와 같은 로그를 남기며 명령어 수행을 실패하는 경우가 있다.
  sudo: 존재하는 tty가 없으며 askpass 프로그램을 지정하지 않았습니다

원인과 해결

: 해당 원인을 분석한 결과.. cron 이나 agent 내부에서 sudo 명령어 실행이 불가능하며, 실제 tty(teletyperwriter, Linux 콘솔 or 터미널) 를 통해 접속된 상태에서만 sudo 명령어 실행이 가능한것같다. 각 서버의 관리자계정에게 sudo 권한을 암호없이 사용하도록 변경한다.

  sudo vi /etc/sudoers  

  # ASIS
  # [각서버계정]  ALL=(ALL:ALL) ALL  #주석처리
  
  # TOBE
  # 각각의 서버에 이부분 NOPASSWD 처리하면 된다.
  [각서버계정]  ALL=(ALL) NOPASSWD: ALL 

참고) https://forum.ubuntu-kr.org/viewtopic.php?t=26144

완료

sh ~/script/dbd/server_hostname.sh


웹1.... >>>
[웹서버계정]@blang.co.kr's password:
192.168.0.10 cc51:52d8:eeee:g12g::ff

와스1.... >>>
[와스1서버계정]@blang.co.kr's password:
192.168.0.12 aa51:bbf8:ccc:d22d::ff

와스2.... >>>
[와스2서버계정]@blang.co.kr's password:
192.168.0.13 hf4d:42j8:caae:t92e::ff

웹서버에서 수행한 쉘스크립트 하나로 각 서버로 원격 수행한 hostname 명령어가 정상출력 되었다 :)

참고)
지금은 간단하게 테스트로 만들었지만, 최종 목적은 shutdown 명령어로 각 서버를 한번에 종료하려고 한다. 매번 종료 명령어를 입력하기 귀찮아서 사용하지 않을때에도 라즈베리파이가 계속 작동하고 있기 때문이다.. 그리고 스마트스위치 등으로 콘센트를 차단시키면 완벽하게 전원을 차단 할 수 있을듯 하다. (스마트플러그는 불안..)

Leave a comment