키 푸시 스크립트, 호스트 이름 대량 수정

생산 환경 라인에서 서버의 통일된 명칭은 매우 중요하다. 이것은 환경 표준화를 따라 운영 엔지니어가 더욱 편리하게 온라인 서버를 관리할 수 있고 문제가 발생할 때 신속하게 문제를 포지셔닝하고 문제를 조사하며 문제를 해결할 수 있다.
스크립트 작성:
1. ssh-key 기반 생산 비밀 키
2. ssh를 바탕으로 다른 노드와 첫 번째 상호작용을 완성(yes/no)
3. ssh-copy-id 기반 원격 대량 전송 키 구현
4. sed를 바탕으로 서로 다른 집단의 다른 호스트 이름을 수정한다
테스트 환경:
호스트 이름
                     IP
              [root@node1 ~]#
                10.10.73.148
              [root@node2 ~]#
                10.10.73.149
              [root@node3 ~]#
                10.10.73.192
1. 10.10.73.148(node1) 노드를 비밀 키 노드로 만들어서 node2, node3에게 보내고 호스트 이름을 수정합니다!
[root@node1 ~]# vim /tmp/lweim.sh
#!/bin/bash
#Version:1.0
#Author:wtc
#Use:Change Hostname

ip="148 149 192"

key=umpay.com

main() { 

  if ! 'rpm -q expect' &> /dev/null;then
  
        yum install expect -y  &> /dev/null
      
        [[ $? -eq 0 ]] && echo "Install Success" || echo "Install Faile"
  
        [ -a /root/.ssh/id_rsa ] && rm -rf /root/.ssh/*
  
            Create_Key
         
      for  n  in  $ip;do
      
         for  i  in  10.10.73.$n;do
          
            First_HandShake
            Push_Key
              
         done
          
      done
 
   else 
      
       exit 1
       
   fi
   
}


Create_Key() {

   echo "Creating RSA Key ...."
   
   `which expect` < /dev/null
   
   set timeout 60
   
   spawn ssh-keygen 
   
   expect "save"
   
   send "\r"
   
   expect "passparase"
   
   send "\r" 
   
   expect "again"
   
   send "\r"
   
   expect eof
END

    [[ $? -eq 0 ]] && echo "Creating RSA Success" || echo "Create RSA Key Faile"
}


First_HandShake() {

   echo "First HandShake with $ip"
   
   `which expect` < /dev/null
   
   set timeout 5
    
   spawn ssh  $i
   
   expect "(yes/no)"
   
   send "yes\r"
   
   expect eof
END

   [[ $? -eq 0 ]] && echo "First HandShake with $i Success" || echo "First HandShake with $i Faile"
}


Push_Key() {

   echo "Push RSA Key to $i"
   
   `which expect` < /dev/null
   
   set timeout 60
   
   spawn ssh-copy-id $i
   
   expect "password"
   
   send "$key\r"
   
   expect eof
END

   [[ $? -eq 0 ]] && echo "Push Key to $i Success" || echo "Push Key to $i Faile"
   
}

main
   
   
##############[  "node1"、"node2" "mysql_01"、"mysql_02" ]##############
ip="148 149"

declare -x x=1

for  n  in  $ip;do
    
    for  i  in  10.10.73.$n;do
    
        ssh $i  "sed -i s/^HOST.*/HOSTNAME=mysql_0$x/ /etc/sysconfig/network"
        
        let x++
        
    done
    
done


##############[  "node3" "umpay_01"] ##############
ip="192"

declare -x x=1

for  n  in  $ip;do

    for  i  in  10.10.73.$n;do
    
        ssh $i "sed -i s/^HOSTNAME.*/HOSTNAME=umpay_0$x/ /etc/sysconfig/network"
        
        let x++
        
     done
     
done

 
테스트 결과:
[root@node1 tmp]# bash -x lweim.sh

호스트 이름
                 IP
            [root@mysql_01 ~]#
             10.10.73.148
            [root@mysql_02 ~]#
             10.10.73.149
            [root@umpay_01 ~]#
             10.10.73.192

좋은 웹페이지 즐겨찾기