ansible批量设置服务器免密码登录,ansible


个人笔记
ansible的优点是不需要安装客户端,只需要主控端设置即可,但是缺点是需要配置免密码认证,而对于海量服务器来说批量配置免秘钥认证比较麻烦,而且配置后安全隐患较大。 本文的目的是实现对多台服务器进行免密码登录设置,并且只需要在本机操作,远端主机不用做任何操作。 1、通过用户和密码批量登录机器 ansible默认是通过免密码登录服务器来实现批量管理的,如果我们的服务器都没有配置免密码登录,但是有用户的密码(比如root用户和root密码,这个时候怎么来做ansible来实现批量部署呢)? 方法如下: 我们在hosts文件里面定义ansible_ssh_pass=密码,即可实现用密码来操作ansible,实例如下 [root@gome ansible]# cat hosts [password] 10.58.8.1 ansible_ssh_pass=123456 10.58.8.2 ansible_ssh_user=weblogic ansible_ssh_pass=123456 ansible_sudo_pass=weblogic 这里面可以通过root用户和密码来登录10.58.8.1,其他像端口和用户等参数是默认的22和root; 对于10.58.8.2则可以通过weblohic用户和密码来登录,但是roles目录下的yml文件, 需要在全局指定sudo: yes 在本地执行 ssh-keyscan10.58.8.110.58.8.2 >> /root/.ssh/known_hosts 将这两台远程主机的公钥记录到本地的known_hosts ansible只要是用密码初次登录远程主机就必须执行上面那条命令,不然不会成功。
2、对服务器进行批量免密码登录设置 这里有两个很重要的命令:1、ssh-keygen :这个命令是用来生成本机的公钥和私钥的 2、ssh-keyscan : 这条命令是用来把远程服务器的公钥来获取到本地的, 例:ssh-keyscan 10.58.8.2 >> /root/.ssh/known_hosts,一般是用来保存到known_hosts里面免除首次登录需要输入yes,但是如果直接保存到authorized_keys里面,就不会生效。这条命令有时会报错:no hostkey alg,不过貌似对这些服务器没有影响,可以直接忽略。 首先,需要用ssh-keygen来吧远程主机的公钥来获取到本地; 然后,设置export ANSIBLE_HOST_KEY_CHECKING=False 然后,执行ssh-keygen来生产本机的公钥和私钥 现在需要通过playbook来实现批量对服务器设置免密码登录了,但是因为现在还没有配置秘钥,所有还得用密码登录,也就是在hosts文件里面对变量ansible_ssh_pass直接定义密码,当然如果所有机器的密码都一样的话,就不需要在hosts里面定义了,直接在命令行用-k参数来指定即可。 然后配置yml文件: # ssh-addkey.yml---- hosts: all gather_facts: no tasks: - name:install sshkey authorized_key:user=rootkey="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" state=present 在这里是通过authorized_key模块来实现的,该模块的目录在 /usr/lib/python2.6/site-packages/ansible/modules/core/system下,通过查看该模块可以发现,它其实是把免密码登录的操作全部做了一遍。 最后运行:ansible-playbook -i hosts ssh-addkey.yml 这样ansible的公钥就会批量记录到远程主机的authorized_key文件中,这个时候把hosts里面的关于密码的变量去掉,就可以实现免密码登录了。
结论: 现在有一批机器的root用户和密码,怎么实现ansible主机和这批机器之间免秘钥认证呢? 1、ssh-keyscan 主机名 >> /root/.ssh/known_hosts 2、配置hosts文件,带密码参数ansible_ssh_pass 3、配置yml文件 4、运行ansible-playbook -i hosts ssh-addkey.yml
注意:配置免密码登录以后,千万不能再在本地执行ssh-keygen并覆盖原先的公钥,这样的话,之前配置的所有免密码登录的机器都将不可再登录。
错误观点:对于普通用户的免秘钥认证,目前没有有效的批量免密码设置方式,可以尝试的措施是先配root免密码认证,在这个认证的基础上再配置普通用户,然后在控制端重新执行ssh-keygen并覆盖原公钥,这样root免密码登录就会失效。
对于手动配置免密码认证,需要执行两步: 1、ssh-keygen 一直回车 2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@目标主机的IP 2、scp /root/.ssh/id_rsa.pub 目标IP:/root/.ssh/authorizedz_keys 但是上面第二步的两种都需要输入远程主机的密码,这个可以通过python脚本来实现。
----------------------------------------------------------------------------------------- ssh相关命令: ssh-agent 如果一个主机和若干个主机建立免密码登录后,在登录一台主机后,不能通过这台主机实现登录其他主机,也就是这些若干主机之间是无法相互登录的,可以通过转发来实现 1.命令行开启ssh-agent或者ssh-agent bash --login -i 2.命令行ssh-add ,ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中,如果不敲这条命令,则无法实现转发 3.配置/etc/ssh/ssh_config ForwardAgent yes 然后执行ssh -A 主机1;ssh -A 主机2,就可以无限跳转到需要登录的机器 ----------------------------------------------------------------------------------------------------------------- ssh-copy-id 将本地的公钥传输到远程主机的authorized_keys文件中 ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host --------------------------------------------------------------------------------------- ssh-keyscan 收集大量主机公钥的工具 ssh-keyscan10.58.8.110.58.8.2 >> /root/.ssh/known_hosts 把1和2两台主机加入本地known_hosts文件,实现登录不需要输入yes

相关内容

    暂无相关文章