You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu18.04环境下用Ansible连接Vagrant主机SSH失败,本地建站遇阻

看起来你在Vagrant+Ansible搭建网站的过程中卡到SSH连接这一步了,我帮你梳理几个关键的排查和修复步骤,都是实际踩过坑的经验:

解决Vagrant主机SSH连接(含Ansible)问题的分步方案

一、先修复Vagrantfile的基础配置问题

你的Vagrantfile有两处明显的小问题,先把这些修正了——很多SSH连接失败的根源其实就是配置不全或不匹配:

  1. Box版本不匹配:你提到本地环境是Ubuntu 18.04,但Vagrantfile里用的是ubuntu/xenial64(对应Ubuntu 16.04),直接换成ubuntu/bionic64(Ubuntu 18.04的官方镜像):
    config.vm.box = "ubuntu/bionic64"
    
  2. 共享目录配置不完整:config.vm...那部分没写完,假设你是想把本地的share/www挂载到虚拟机的/var/www,补全成这样:
    config.vm.synced_folder "./share/www", "/var/www", create: true
    
  3. 调整配置的作用域:把网络、共享目录这些配置放到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的连接:

  1. 重新加载虚拟机,让新配置生效:
    vagrant reload web3
    
  2. 尝试直接用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的连接问题:

  1. 生成Vagrant专属的SSH配置文件:
    Vagrant自带生成Ansible可用的inventory配置的功能,执行这条命令:
    vagrant ssh-config web3 > vagrant_ssh_config
    
    然后在运行Ansible playbook的时候指定这个配置文件:
    ansible-playbook -i ./vagrant_ssh_config your_playbook.yml
    
  2. 确保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之类的
    
  3. 检查虚拟机的防火墙:
    Ubuntu 18.04默认开了ufw防火墙,先确保SSH端口(22)是允许访问的:
    先通过vagrant ssh web3进入虚拟机,然后执行:
    sudo ufw allow 22/tcp
    sudo ufw reload
    
  4. 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:06:15