需求:新加了一台机器,IP:192.168.1.132 ,使用自动化工具实现免密登录。
思路:通过saltstack的salt-run执行本地模块,该模块使用ansible进行秘钥的相关操作。
在salt-master端编写:cat /srv/salt/_runners/keyminion.py
#导入模块
import codecs import json import commands
#定义名字
def publicKey(ipaddr):#传入IP地址,因为ansible操作远程主机是需要IP,密码(密码在代码中指定)
#编写文件,文件内容为IP,密码 with codecs.open('/etc/ansible/{0}.txt'.format(ipaddr), 'w') as f: f.write("{0} ansible_ssh_pass=123456".format(ipaddr)) resultBean = dict()
#定义命令,ansible -i 指定刚才的文件,-m script 在本地执行脚本,-a '/srv/salt/_shell/pub_key.sh 脚本路径 cmd = "ansible -i /etc/ansible/{0}.txt all -m script -a '/srv/salt/_shell/pub_key.sh'".format(ipaddr)
#执行命令 status, output = commands.getstatusoutput(cmd) if status == 0: resultBean['code'] = 0 resultBean['message'] = 'success' resultBean['data'] = output return json.dumps(resultBean)
cat /srv/salt/_shell/pub_key.sh
#!/bin/bash source /etc/profile
#创建秘钥目录 mkdir /root/.ssh
#设置权限 chmod 700 /root/.ssh
#进入该目录并下载秘钥文件,此处是在salt-master端安装了nginx,将文件放入了HTML目录中。 cd /root/.ssh yum install -y wget wget 192.168.1.131/authorized_keys
#修改权限 chmod 600 authorized_keys
执行:
[root@sixgod _runners]# salt-run keyminion.publicKey 192.168.1.132