Ubuntu18.04环境下用Ansible连接Vagrant主机SSH失败,本地建站遇阻
看起来你在Vagrant+Ansible搭建网站的过程中卡到SSH连接这一步了,我帮你梳理几个关键的排查和修复步骤,都是实际踩过坑的经验:
解决Vagrant主机SSH连接(含Ansible)问题的分步方案
一、先修复Vagrantfile的基础配置问题
你的Vagrantfile有两处明显的小问题,先把这些修正了——很多SSH连接失败的根源其实就是配置不全或不匹配:
- Box版本不匹配:你提到本地环境是Ubuntu 18.04,但Vagrantfile里用的是
ubuntu/xenial64(对应Ubuntu 16.04),直接换成ubuntu/bionic64(Ubuntu 18.04的官方镜像):config.vm.box = "ubuntu/bionic64" - 共享目录配置不完整:
config.vm...那部分没写完,假设你是想把本地的share/www挂载到虚拟机的/var/www,补全成这样:config.vm.synced_folder "./share/www", "/var/www", create: true - 调整配置的作用域:把网络、共享目录这些配置放到
web3的定义块里,避免全局配置冲突,最终修正后的Vagrantfile大概是这样:# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu/bionic64" config.vm.box_check_update = false config.vm.define "web3" do |web3| web3.vm.network "private_network", ip: "192.168.56.56" web3.vm.synced_folder "./share/www", "/var/www", create: true end end
二、先确保Vagrant自身能SSH到虚拟机
先排除Vagrant本身的问题,再去处理Ansible的连接:
- 重新加载虚拟机,让新配置生效:
vagrant reload web3 - 尝试直接用Vagrant的SSH命令连接:
vagrant ssh web3
如果这一步失败,按这些方向排查:
- 检查VirtualBox的网络设置:确保
Host-Only Adapter已经启用,而且192.168.56.x这个IP段没有被本地其他设备占用。 - 查看Vagrant的详细日志:执行
vagrant up web3 --debug,搜索和SSH相关的报错,比如密钥文件权限不对、端口被占用之类的。 - 重置虚拟机:如果日志里没找到明确问题,干脆执行
vagrant destroy web3 && vagrant up web3重新创建一遍——有时候就是虚拟机状态异常导致的。
三、解决Ansible无法SSH连接的问题
当Vagrant自己能SSH进去后,再来处理Ansible的连接问题:
- 生成Vagrant专属的SSH配置文件:
Vagrant自带生成Ansible可用的inventory配置的功能,执行这条命令:
然后在运行Ansible playbook的时候指定这个配置文件:vagrant ssh-config web3 > vagrant_ssh_configansible-playbook -i ./vagrant_ssh_config your_playbook.yml - 确保Ansible用对了SSH密钥:
Vagrant虚拟机的默认私钥在~/.vagrant.d/insecure_private_key,你可以在Ansible的playbook里直接指定:- hosts: web3 remote_user: vagrant vars: ansible_ssh_private_key_file: "~/.vagrant.d/insecure_private_key" ansible_ssh_host: "192.168.56.56" ansible_ssh_port: 22 tasks: # 这里写你的任务,比如安装Apache之类的 - 检查虚拟机的防火墙:
Ubuntu 18.04默认开了ufw防火墙,先确保SSH端口(22)是允许访问的:
先通过vagrant ssh web3进入虚拟机,然后执行:sudo ufw allow 22/tcp sudo ufw reload - 验证Ansible连通性:
用这条命令快速测试Ansible能不能连上虚拟机:ansible web3 -i ./vagrant_ssh_config -m ping
四、几个容易踩的坑
- 密钥文件权限:本地的
~/.vagrant.d/insecure_private_key权限必须是600,否则SSH会直接拒绝,执行这条命令修正:chmod 600 ~/.vagrant.d/insecure_private_key - Ansible版本兼容性:Vagrant 2.1对Ansible的版本有点挑剔,建议用Ansible 2.8到2.9之间的版本——太新或太旧都可能出现兼容性问题。
- VirtualBox Guest Additions:如果共享目录或网络有奇怪的问题,确保Guest Additions安装正确,Vagrant可以自动帮你装:
先装插件:vagrant plugin install vagrant-vbguest,然后在Vagrantfile里加一行:config.vbguest.auto_update = true
内容的提问来源于stack exchange,提问作者Evgeny Gil
相关产品推荐
相关产品推荐

