如何在Ansible命令行中传递密钥口令?
在Ansible命令中传递SSH密钥口令的方法
直接在命令行明文传递密钥口令是非常不安全的操作(口令会留在命令历史、进程列表中),但如果是临时测试场景,这里有几种可行的方式,同时也会推荐更安全的替代方案:
1. 使用sshpass工具(临时应急用)
首先需要在控制节点安装sshpass:
- Debian/Ubuntu系统:
sudo apt install sshpass - RHEL/CentOS系统:
sudo yum install sshpass
然后用sshpass包裹你的Ansible命令,通过-p参数指定密钥口令:
sshpass -p "你的密钥明文口令" ansible --args="top -b n1" --connection=ssh --inventory-file=xx.xx.xxx.xxx, all --extra-vars="ansible_user=devuser" --private-key /opt/hivecenter/keys/id_rsa_135
⚠️ 强烈提醒:这种方式会把明文口令暴露在命令历史和系统进程中,仅适合一次性临时测试,绝对不要在生产环境使用。
2. 使用ssh-agent(推荐,安全可靠)
这是更安全的做法,通过ssh-agent管理你的密钥,只需要输入一次口令,后续会话内的所有SSH/Ansible操作都无需重复输入:
# 启动ssh-agent会话 eval $(ssh-agent) # 添加你的密钥,此时系统会提示输入一次口令 ssh-add /opt/hivecenter/keys/id_rsa_135 # 执行你的Ansible命令,无需再输入密钥口令 ansible --args="top -b n1" --connection=ssh --inventory-file=xx.xx.xxx.xxx, all --extra-vars="ansible_user=devuser" --private-key /opt/hivecenter/keys/id_rsa_135
当你关闭终端窗口时,ssh-agent会自动退出,密钥也会从内存中清除,不会留下任何明文口令记录。
额外建议
如果是长期使用的场景,更推荐去掉密钥的口令保护(前提是你能保证密钥文件的权限安全,比如设置chmod 600 /opt/hivecenter/keys/id_rsa_135),或者使用Ansible Vault来加密存储敏感信息,避免任何明文传递的风险。
内容的提问来源于stack exchange,提问作者Narinder Verma
相关产品推荐
相关产品推荐

