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)
posted @ 2020-11-23 09:35  丛丛丛丛  阅读(83)  评论(0编辑  收藏  举报