Vagrant+Ansible环境下SSH公钥认证失败问题求助
解决Ansible SSH Permission Denied (publickey)问题
刚仔细扒了你的执行日志,一眼就揪出了几个关键问题,咱们一步步来搞定:
1. 最核心的错误:用公钥做了SSH身份验证
看日志里的这行关键命令:
-o 'IdentityFile="/home/vagrant/.ssh/id_rsa.pub"'
SSH连接的逻辑是:本地用私钥(id_rsa)证明身份,远程主机用公钥(id_rsa.pub)验证。你现在拿公钥去做本地身份凭证,肯定会被远程拒绝!
快速临时修复
直接在ansible命令里指定正确的私钥路径,同时改用Vagrant默认用户:
ansible -i hosts web1 -m ping -vvv --private-key=/home/vagrant/.ssh/id_rsa -u vagrant
2. 改用Vagrant默认用户登录
Vagrant创建的Debian虚拟机,默认启用的管理员用户是vagrant,而非root——root用户通常默认禁止SSH密钥登录,或者根本没配置对应密钥。硬怼root用户大概率会失败,换成vagrant才是正确姿势。
3. 确保公钥已同步到web1虚拟机
你需要把mgmt的公钥复制到web1的vagrant用户的授权列表里:
在mgmt上执行:
ssh-copy-id vagrant@10.0.15.21
如果提示输入密码,Vagrant虚拟机的vagrant用户默认密码就是vagrant。
4. 优化Hosts文件,减少重复参数
把你的hosts文件改成ini格式,直接配置好用户和密钥路径,以后执行命令更省心:
[web1] 10.0.15.21 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa
之后执行命令就简化成:
ansible -i hosts web1 -m ping -vvv
额外小技巧:用Vagrant自动生成的密钥
其实Vagrant会为每个虚拟机生成专属私钥,路径一般是:~/.vagrant/machines/web1/virtualbox/private_key
用这个密钥的话,命令可以写成:
ansible -i hosts web1 -m ping -vvv --private-key=~/.vagrant/machines/web1/virtualbox/private_key -u vagrant
内容的提问来源于stack exchange,提问作者Esposi
相关产品推荐
相关产品推荐

