配置ssh密钥登录
expect脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/expect -f set ip [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set timeout 10 spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip expect { "*password:" {send "$passwd\r"} "*yes/no*" {send "yes\r"} } expect off |
shell调用expect脚本
1 2 3 4 5 6 7 8 |
#!/bin/bash while read id;do ip=`echo $id | awk '{print $1}'` user=`echo $id | awk '{print $2}'` passwd=`echo $id | awk '{print $3}'` ./copy-key.exp $ip $user $passwd done <host.list |
host.list格式
1 2 3 4 5 6 |
192.168.60.152 root root 192.168.60.155 root root 192.168.60.156 root root 192.168.60.110 root root 192.168.60.111 root root 192.168.60.100 root root |
虚拟机同步时间
暂时使用脚本,后期可用crontab实现
1 2 3 4 5 6 |
#!/bin/bash cmd="ntpdate -u time.windows.com" cmd2="hwclock -w" ansible annhe -m command -a "$cmd" ansible annhe -m command -a "$cmd2" ansible annhe -m command -a "date" |
利用ansible更改salt master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash [ $# -lt 2 ] && echo "args error" && exit 1 oldmaster="192.168.60.10" newmaster="192.168.60.100" group=$1 saltgroup=$2 salt-key -d "$saltgroup" ansible $group -m command -a "cp /etc/salt/minion /etc/salt/minion.bak" ansible $group -m command -a "sed -i 's/$oldmaster/$newmaster/g' /etc/salt/minion" ansible $group -m command -a "rm -f /etc/salt/pki/minion/minion_master.pub" ansible $group -m command -a "/etc/init.d/salt-minion restart" ansible $group -m command -a "/etc/init.d/salt-minion status" ansible $group -m command -a "tail /var/log/salt/minion" |
copy文件
用ansible copy设置软件源的脚本并执行
1 2 3 |
ansible hadoop -m copy -a "src=/srv/salt/repo.sh dest=/tmp/repo.sh owner=root group=root mode=0755" ansible hadoop -m command -a "ls -l /tmp/repo.sh" ansible hadoop -m command -a "/tmp/repo.sh" |
repo.sh用于设置软件源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash yumdir="/etc/yum.repos.d" epel="$yumdir/epel.repo" backup="$yumdir/backup" [ ! -d $backup ] && mkdir $backup mv -f $yumdir/*.repo $backup rpm -qa |grep epel-release && rpm -e epel-release rpm -Uvh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch sed -i 's#download.fedoraproject.org/pub#mirrors.yun-idc.com#g' $epel sed -i -E 's/^mirrorlist(.*)/#mirrorlist\1/g' $epel sed -i -E 's/#baseurl(.*)/baseurl\1/g' $epel curl -s http://mirrors.163.com/.help/CentOS6-Base-163.repo -o $yumdir/Base-163.repo yum clean all yum makecache |
ansible在Python3下的问题
开发机Python3,Python2并存,使用ansible有问题
1 2 3 4 5 |
[root@HADOOP-215 copy-key]# ansible all -m ping File "/usr/bin/ansible", line 203 except errors.AnsibleError, e: ^ SyntaxError: invalid syntax |
查看ansible相关脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@HADOOP-215 copy-key]# head -n 1 /usr/bin/ansible* ==> /usr/bin/ansible <== #!/usr/bin/python ==> /usr/bin/ansible-doc <== #!/usr/bin/python ==> /usr/bin/ansible-galaxy <== #!/usr/bin/python ==> /usr/bin/ansible-playbook <== #!/usr/bin/python ==> /usr/bin/ansible-pull <== #!/usr/bin/python ==> /usr/bin/ansible-vault <== #!/usr/bin/python |
替换为Python2.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@HADOOP-215 copy-key]# sed -i 's|#!/usr/bin/python|#!/usr/bin/python2.6|g' /usr/bin/ansible ansible ansible-doc ansible-galaxy ansible-playbook ansible-pull ansible-vault [root@HADOOP-215 copy-key]# sed -i 's|#!/usr/bin/python|#!/usr/bin/python2.6|g' /usr/bin/ansible* [root@HADOOP-215 copy-key]# head -n 1 /usr/bin/ansible* ==> /usr/bin/ansible <== #!/usr/bin/python2.6 ==> /usr/bin/ansible-doc <== #!/usr/bin/python2.6 ==> /usr/bin/ansible-galaxy <== #!/usr/bin/python2.6 ==> /usr/bin/ansible-playbook <== #!/usr/bin/python2.6 ==> /usr/bin/ansible-pull <== #!/usr/bin/python2.6 ==> /usr/bin/ansible-vault <== |
执行成功
1 2 3 4 5 6 7 8 9 10 11 |
[root@HADOOP-215 copy-key]# ansible annhe -m ping 192.168.60.155 | success >> { "changed": false, "ping": "pong" } 192.168.60.152 | success >> { "changed": false, "ping": "pong" } ... |
ansible hadoop -m script -a "a.sh"