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

Vagrant执行provision时SSH权限拒绝,如何修复并完成部署脚本安装?

解决Vagrant provision时SSH权限拒绝问题并完成部署脚本安装

首先梳理下你的问题:你基于centos/7镜像配置了Vagrantfile,执行vagrant up能正常启动虚拟机,但部署脚本未自动执行;单独运行vagrant provision时出现SSH权限拒绝错误,提示无法连接到指定IP。

下面是几个亲测有效的排查和修复步骤:

1. 检查同步目录是否覆盖虚拟机默认用户目录

你的Vagrantfile里配置了:

config.vm.synced_folder ".", "/home/vagrant"

这个配置会把宿主机当前目录直接挂载到虚拟机的/home/vagrant,会覆盖虚拟机原有的/home/vagrant内容——包括Vagrant用来SSH连接的.ssh密钥目录!这大概率是导致SSH权限拒绝的核心原因。

修复方法:
把同步目录改成非用户根目录,比如:

config.vm.synced_folder ".", "/home/vagrant/project"

部署脚本的路径无需修改(因为path: "./conf/bitrix-env.sh"是宿主机路径,Vagrant会自动通过同步目录映射到虚拟机)。

2. 调整私有网络IP或SSH连接方式

如果同步目录没问题,那可能是私有网络IP的问题:

  • 先在宿主机ping一下192.168.33.10,如果ping不通,说明这个网段可能被其他设备占用,或者VirtualBox私有网络配置异常。可以换个网段的IP试试,比如改成192.168.56.10:
    config.vm.network :private_network, ip: "192.168.56.10"
    
  • 或者强制Vagrant用端口转发的方式连接SSH(而非私有IP),在Vagrantfile里添加SSH配置:
    config.ssh.host = "127.0.0.1"
    config.ssh.port = 2222 # 可以先执行`vagrant ssh-config`查看实际的转发端口,可能不是2222
    

3. 关闭虚拟机内的防火墙和SELinux

CentOS 7默认开启的firewalld和SELinux,可能会阻止SSH连接或脚本执行:
先通过vagrant ssh进入虚拟机(vagrant up正常的话,这个命令能通过默认NAT网络连接),然后执行:

# 临时关闭防火墙
sudo systemctl stop firewalld
# 禁止防火墙开机启动
sudo systemctl disable firewalld

# 临时关闭SELinux
sudo setenforce 0
# 永久关闭SELinux(需重启生效)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

4. 重新触发Provision

做完上述调整后,不要直接执行vagrant provision,而是用重启+重新provision的命令,确保所有配置生效:

vagrant reload --provision

这个命令会重启虚拟机并自动执行部署脚本,比单独执行vagrant provision更可靠。

按照这些步骤操作,应该就能解决SSH权限问题,顺利完成部署脚本的安装了。

内容的提问来源于stack exchange,提问作者Victor Tihomirov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:21:52