使用expect配合ssh的key认证实现多台服务器的自动化处理
使用expect配合ssh的key认证实现多台服务器的自动化处理
使用以下方法可以方便、快速的实现多台服务器(500+)的管理,并且对中央管理服务器的配置要求不高。
使用crontab自动更新配置.
[root@4Aiur ~]# crontab -l
0 * * * * /usr/sbin/ntpdate -u -t 5 cn.pool.ntp.org >/var/log/ntpsync.log 2>&1
0 23 * * * /Application/Update/run.sh >/dev/null 2>&1
把加载key加入到系统自启动.
[root@4Aiur ~]# cat /etc/rc.local
#!/bin/sh
#
/root/.Batch/agent.exp
加载key的expect脚本.
[root@4Aiur ~]# cat /root/.Batch/agent.exp
#!/usr/bin/expect
spawn $env(SHELL)
send "cd /root/.Batch/\r"
expect "*"
send "killall ssh-agent\r"
expect "*"
send "ssh-agent | head -2 > /root/.Batch/.agent.env\r"
expect "*"
send ". /root/.Batch/.agent.env\r"
expect "*"
send "ssh-add key\r"
expect "Enter passphrase for key: "
send "example\r"
expect eof
定时在23点的自动更新程序.
[root@4Aiur ~]# cat /Application/Update/run.sh
#/bin/sh
# set -x
. /root/.Batch/.agent.env
DEVICE_LIST="/root/4Aiur/iplist"
SH_PATH="shell"
LOG_PATH="logs"
cd /Application/Update
/usr/java/jdk1.5.0_06/bin/java -jar Config.jar 2>/dev/null
mkdir -p ${SH_PATH} ${LOG_PATH}
rm -f ${SH_PATH}/* ${LOG_PATH}/*
while read SN HOSTNAME IPADDRESS
do
(SH="${SH_PATH}/${HOSTNAME}"
LOG="${LOG_PATH}/${HOSTNAME}"
cat > ${SH} ${LOG} 2>&1 &
)
done