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
相关产品推荐
相关产品推荐

