셸 자동화 배치 대량 사용자 및 대량 SSH 설정

Liux 아래 에서 셸 스 크 립 트 를 능숙 하 게 사용 하면 가끔 은 우리 가 인공 적 으로 해 야 할 일 을 해결 하 는 데 도움 을 줄 수 있 습 니 다. 어떤 회사, 예 를 들 어 아 리 나 경 동 은 클 러 스 터 규모 가 매우 크 고 걸핏하면 수백 수천 대의 서버 가 있 습 니 다. 대량의 기계 가 인공 적 으로 어떤 일 을 해 야 한다 면 매우 비효 율 적 이 고 번 거 로 우 며 실수 하기 쉽 습 니 다.그래서 모든 회 사 는 자신의 자동화 운영 프로그램 을 가지 고 있 습 니 다. 오늘 산 선 은 여기 서 셸 + expect 를 이용 하여 이 루어 진 자동화 배 치 를 공유 합 니 다. 주로 2 가지 기능 이 있 습 니 다. 사용자 와 SSH 암호 없 이 양 방향 으로 로그 인 하 는 스 크 립 트 를 대량으로 설정 하고 문 말 에 산 선 은 이 몇 개의 스 크 립 트 를 포장 하여 업로드 합 니 다. 사용 과 테스트 를 환영 합 니 다.주로 포 함 된 것: 3 개의 스 크 립 트 에 hosts 파일 과 사용 설명서 가 추가 되 어 있 습 니 다.스 크 립 트 는 다음 과 같 습 니 다: 사용자 의 스 크 립 트 를 대량으로 만 듭 니 다 cuser. sh:


if [  !  $# -eq 2  ] ; then
echo "              !"
exit

else
name="$1"
passwd="$2"
fi


cat hosts | while read hosts
do



echo "  $hosts   $name"
expect <<EOF
spawn   ssh $hosts "useradd $name; echo $name:$passwd | chpasswd" 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "dongliang\r" ;exp_continue  }
}


EOF

echo  "    "


done

루트 사용자 스 크 립 트 초기 화, initroot. sh

if [  ! $# -eq 2  ] ;then
echo "            "
exit
else
#   
uname="$1"
#  
passwd="$2"
fi


#       expect  
ep=`rpm -qa | grep expect` 

if [ -z $ep   ] ; then
 echo "       ,    expect  ,      "
 sleep 2
 yum install -y expect

else
 echo "    expect  ,3  ,    ssh    "
 sleep 3
fi



#   ssh    
cat hosts | while read host
do



echo "     $host   ssh  "
expect <<EOF
spawn  scp -r .ssh/  $host:/$uname 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$passwd\r" ;exp_continue  }
}


EOF





echo "    $host       ....."
sleep 2
expect <<EOF
spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$passwd\r" ;exp_continue  }
}


EOF

echo "    ...."

done




#  root    hosts    



echo "     hosts        "

sleep 1

#     hosts          

cat hosts | while read host
do

scp -r /etc/hosts $host:/etc/


done


echo "  hosts    "


일반 사용자 의 설치 스 크 립 트, noroot. sh


if [ ! $# -eq 2  ] ; then

echo "             "
exit
else

#     
uname="$1"
#       
pd="$2"
fi


#   ssh    
cat hosts | while read host
do



echo "     $host   ssh  "
expect <<EOF
spawn  scp -r .ssh/  $host:/home/$uname 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$pd\r" ;exp_continue  }
}


EOF





echo "    $host       ....."
sleep 2
expect <<EOF
spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$pd\r" ;exp_continue  }
}


EOF

echo "    ...."

done



hosts 파일 예제:
192.168.46.28
192.168.46.29
192.168.46.33

사용 설명서:
         :
1,         
2,         SSH  
3,    Centos6.5,        ,   ,      



    :

1,     host  ,      IP   hosts   ,            root     。

2,     root      ssh-keygen -t rsa -P ''      ssh  

3,    initroot.sh  ,   root      ,  ,               expect,    
  , yum  ,     ,     ssh    ,       

4,  cuser.sh  ,             ,                 

5,    root     hosts   noroot.sh        
     ,          
6,           ,     2     ssh  

7,    noroot.sh  ,             ssh       

8,    ,       SSH  。

좋은 웹페이지 즐겨찾기