Ansible贴士二则
避免主机SSH指纹确认
通常在第一次用SSH连接一台远程主机的时候,都会弹出一个SSH指纹警告,需要人工确认后,把这个指纹加到本地.ssh/knwon_hosts文件中。以后要是同一远程主机的指纹变化了(比如被冒充),就会导致SSH报错后断开连接,除非你能确认这种变化,那就需要从known_hosts里把原来的指纹删除:
ssh-keygen -R remote_host:port
然后再次连接并确认记录新指纹。
手工单次连接时顺手确认一下没什么问题,但是用Ansible连接实际上也是走ssh,也要验证指纹,所以也会有这个交互过程。
但这就麻烦了,因为通常用Ansible跑playbook时都是需要处理一堆主机的,每个都这样人工确认就太麻烦了,所以更好的办法是先批量更新一下known_hosts:
# 主机地址列表
HOSTS=(xxx yyy zzz)
for h in "${HOSTS[@]}"
do
ssh-keyscan -p 22 $h >> ~/.ssh/knwon_hosts
done
使用指定的key连接
通常用ssh连接时,可以通过-i参数指定key文件,比如:
ssh -i /path_to/your_key_file user@host
Ansible里也可以指定,使用ansible_ssh_private_key_file变量:
ansible_ssh_private_key_file: /path_to/your_key_file
外一则
之前在Ansible中创建用户用的生成密码命令:
python3 -c "import crypt; print(crypt.crypt('{{ plain_password }}'))"
现在会报一个警告:
DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13
从Python3.13开始要移除crypt模块了,所以需要换个方式。
一个方式是使用passlib模块:
python3 -c "from passlib.hash import sha512_crypt; print(sha512_crypt.hash('your_password'))"
不过更好的方法是使用Ansible内置的过滤器:
- name: 创建用户
hosts: all
vars:
plain_password: "your_password"
tasks:
- name: 创建用户(使用过滤器生成哈希)
user:
name: youruser
password: "{{ plain_password | password_hash('sha512') }}"
state: present
no_log: true
推送到[go4pro.org]