1. 胖哥叨逼叨首页
  2. OpenSource
  3. Ansible

Ansible由浅入深 – SSH key认证方式

我们在上篇文章分享了inventory.ini文件的编写及使用,那么我们是否有注意到一点风险较高的内容呢。没错就是我们把服务器的密码写到了inventory.ini文件中,这是一个风险很高的事情。一旦inventory.ini文件丢失那可是无法想象会发生什么事情。所以我们今天就要分享一下如何在ansible上使用SSH-KEY的认证方式。

我们打开inventory.ini将密码进行删除,此时我们测试一下ansible ping的结果,是无法进行连接的。

pangshare-01
ansible-node[1:2] ansible_connection=ssh ansible_user=root
# 命令执行结果
ansible-node1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}
ansible-node2 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}

创建SSH-KEY

进入.ssh文件夹后输入ssh-keygen,此时我们会看到如下提示,为了方便后面的使用,我们把ssh-key保存到我们指定的文件夹后进行命名

# 路径为/root/.ssh/ansible
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/ansible
# 密码为空
Enter passphrase (empty for no passphrase):
#密码为空
Enter same passphrase again:

创建完成,我们查看文件可以看到系统为我们生成了两个文件ansible(私有密码)、ansible.pub(公有密钥)。其中ansible为私有密钥一定要保存好。

复制密钥

当我们在ansible-control机器上创建好了密钥后,我们可以通过命令将ssh-key传递到ansible-node1\ansible-node2上。

# 在.ssh目录下执行
ssh-copy-id -i ansible ansible-node1
# 命令执行结果
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "ansible.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
# 提示需要输入ansible-node1密码
root@ansible-node1's password:

# 提示已经增加了一个密钥在ansible-node1上
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ansible-node1'"
and check to make sure that only the key(s) you wanted were added.

接下来我们登录到ansible-node1上检查一下密码的情况是否已经存在了ansible密钥

登录到ansible-node1上,查看.ssh目录下我们可以看到有一个文件是authorized_keys,我们查看一下这个文件的内容可以看到root@ansible-control信息。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgX9atktyRlUDOx8TfyaOhO9E0v1hTkfl0uu4UwoimtD+RkUwg6fa6BB8gzFpdohtglLsSCpZXy+i7Hez114vNlpYJLc/jypMllNiNa/9JcZ6c9USY6vElqzxWoHhF67dZcv6aY159NiwppC1VZVDFLe9+u7o8jdDzszAPJEaxDj/M2DD1DEBmsbG222FAjP6nyyyAQLlaaLD+hNchfsYMp0p1NcVVEKDtYvQl46o/WX/IZnGzz/Q0B6FcxDCsq6RsewRLfB4RCF4PLOka0hCgxB5D+hk6VBu75nkpx0/UdQeAEay4/9iqa+8JLo6cV6oyUlES8/nq5GBIXyYvtnZ/ root@ansible-control

使用SSH-KEY进行登陆

我们登陆到ansible-control使用ssh-key验证并登陆到ansible-node1上,同样的方法将SSH-KEY同步到ansible-node2上。

[root@ansible-control ~]# ssh -i .ssh/ansible ansible-node1
Last login: Mon Jul 20 16:29:14 2020 from 192.168.31.97
[root@ansible-node1 ~]#

ansible使用SSH-KEY

我们将inventory.ini文件中的密码删除后,在ansible-control上输入下面的命令通过ssh-key与受控主机进行联系。

ansible pangshare-01 -m ping -i inventory.ini --private-key=/root/.ssh/ansible
# 命令执行结果
ansible-node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
ansible-node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/2396.htm

发表评论

电子邮件地址不会被公开。 必填项已用*标注