ansible入门
ansible入门之免密登录问题
一、ansible 简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务
二、ansible安装
1、环境:centos7系统,地址分别为192.168.10.128\192.168.10.130\192.168.10.131,其中,128为ansible主机,其他两台是远程节点,作为目标客户机使用
2、安装:在192.168.10.128 上安装ansible即可,其他两台无需安装:
Ansible软件默认不在标准仓库中,需要用到repo源,添加repo:
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
安装ansible:
yum install ansible -y
关于yum的参数:
检查ansible版本
ansible --version
添加主机清单到hosts文件中:
测试ansible,使用ping命令测试主机的连通性
ansible all -m ping
生成密钥,并将密钥发送到客户机:
[root@server1 .ssh]# ssh-copy-id root@192.168.10.130
再次测试连通性:
[root@ser1 ~]# ansible all -m ping
192.168.10.131 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: root@192.168.10.131: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
"unreachable": true
}
ansible 在hosts文件中设置免用户名密码登录:
## db-[99:101]-node.example.com
[serv]
192.168.10.130 ansible_ssh_user='root' ansible_ssh_pass='cui0116'
192.168.10.131 ansible_ssh_user='root' ansible_ssh_pass='cui0116'
免密登录测试
[root@ser1 ~]# ansible all -m ping
192.168.10.131 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
192.168.10.130 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
存在的问题,设置公钥后无法实现免密登录
使用ssh -vvvv root@192.168.10.130 查看debug信息:
debug1: Skipping ssh-dss key /home/user/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes
网上搜索了一下,才知道 OpenSSH 7.0 以上已经默认关闭了 ssh-dss 了,我们看一下我们的 ssh 版本:
[root@server2 ssh]# ssh -V
OpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018
[root@server2 ssh]#
已经是 7.8 了,我们用下面的方法把 ssh-dss 打开:
注意是 ssh_config,本地的配置文件,不是服务器上的 sshd_config。
找到 # Host * 把注释去掉,然后下面添加一句:PubkeyAcceptedKeyTypes=+ssh-dss,完成后这个样子
经过了各种方法还是不行,放弃,选用rsa方式重新生成密钥,
ssh-keygen -t rsa
ssh-copy-id root@192.168.10.130
再次登录客户机仍然需要输入密码,使用-v参数调试查看日志:
ssh root@192.168.10.130 -p 22 -v -i /root/.ssh/id_rsa.pub
报错:Permissions 0644 for '/root/.ssh/id_rsa.pub' are too open
修改权限,chmod 600 /root/.ssh/id_rsa.pub
再次调试,报错如下:
"/root/.ssh/id_rsa.pub": invalid format
修改/etc/config/ssh_config 文件,将默认使用密钥文件修改为id_rsa 公钥,重启ssh服务:systemctl restart sshd.service
再次登录,ssh root@192.168.10.130,成功!
如果要使用其他用户实现免密登录,那么在使用ssh-copy-id 发送密钥时就用哪个用户,例如远程主机的cui用户也想要实现免密登录,就执行:
ssh-copy-id -i /root/.ssh/id_rsa.pub cui@192.168.10.130
![](https://img2020.cnblogs.com/blog/2208466/202012/2208466-20201202100607974-1414734931.png)