为了避免Ansible下发指令时输入目标主机密码,通过证书签名达到SSH无密码是一个好的方案,通过ssh-keygen与ssh-copy-id来实现快速证书的生成及公钥下发,其中ssh-keygen生成一对密钥,ssh-copy-id来下发生成的公钥。
一、方法一
1、执行 ssh-keygen -t rsa 生成密钥对
这时当前用户home目录下面会生成一对密钥,id_rsa 为私钥,id_rsa.pub 为公钥。
2、通过 ssh-copy-id 进行传输公钥
接着登录目标主机 ssh root@192.168.1.200,无须密码即可登录成功。并且查看当前用户下的 .ssh/目录,发现多出了两个文件:
1)known_hosts 用于验证连接的主机是否正确
2)authorized_keys 用来存放其他主机的公钥信息
二、方法二
建议使用免密码登录来管理服务器,在ansible的服务器上配置一套ssh的key,通过ssh-copy-id把公钥分发到要管理的服务器上。具体步骤如下:
1.使用ssh-keygen产生ssh密钥
[root@test-201 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: dd:20:23:7c:1a:2e:01:bf:b1:67:7a:08:87:5f:e6:7e root@test-201 The key’s randomart image is: +–[ RSA 2048]—-+ | . | | o . | | + + + . | | . * = + o | | o = B S . . | | + X | | + o | | o E | | .. | +—————–+
2.将公钥发送到要管理的服务器
使用ssh-copy-id命令
比如要发送到10.2.31.202,使用如下命令:
[root@test-201 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 10.2.31.202 root@10.2.31.202’s password: Now try logging into the machine, with “ssh ‘10.2.31.202’”, and check in: .ssh/authorized_keys to make sure we haven’t added extra keys that you weren’t expecting.
3.将公钥批量发送到要管理的服务器
如果你有100台服务器初始化了,手动发key肯定很累的,如果你这100台机器密码一致,可以通过ansible的authorized_key模块来实现批量发送,命令如下
ansible test --ask-pass -u 用户名 -m authorized_key -a "user=用户名 key='$(cat ~/.ssh/id_rsa.pub)'"
之后输入机器的密码即可批量发送了。
使用ansible
命令格式如下:
ansible + 主机组名称 + -m + 模块名称 + -a + 参数
主机组名称,即hosts中定义的主机组名称
-m 指使用模块,后加指定的模块名称
-a 指传给模块的参数
在不指定模块时,默认调用command模块。
评论前必须登录!
注册