Vagrant多VM SSH连接异常:仅一台可连其余失败求助
故障排查与修复方案
核心问题定位
你混淆了Vagrant SSH端口转发和VM内部SSH服务端口的区别:
forwarded_port是将主机的端口(如2712)转发到VM内部的22端口,仅当通过localhost连接时需要使用这个主机端口;- 直接连接VM的私有IP(如192.168.56.3)时,VM的SSH服务监听的是自身的22端口,而非主机的转发端口。
你的ssh vagrant@192.168.56.3 -p 2712命令本质是错误的——VM的2712端口根本没有服务监听,自然会被拒绝连接。Ansible连接失败也是因为清单错误配置了ansible_ssh_port为主机转发端口。
具体排查与修复步骤
1. 修正Ansible清单配置
你有两种可选的连接方式,二选一即可:
方式一:直接通过私有IP连接VM(推荐)
修改清单中的ansible_ssh_port为VM内部的SSH默认端口22:
{ "all": { "hosts": { "kubemaster": { "ansible_host": "192.168.56.2", "ansible_user": "vagrant", "ansible_ssh_port": 22 }, "kubenode01": { "ansible_host": "192.168.56.3", "ansible_user": "vagrant", "ansible_ssh_port": 22 }, "kubenode02": { "ansible_host": "192.168.56.4", "ansible_user": "vagrant", "ansible_ssh_port": 22 } }, "children": {}, "vars": {} } }
方式二:通过主机转发端口连接
如果要使用localhost的转发端口,需将ansible_host设为localhost,保留原转发端口:
{ "all": { "hosts": { "kubemaster": { "ansible_host": "localhost", "ansible_user": "vagrant", "ansible_ssh_port": 2711 }, "kubenode01": { "ansible_host": "localhost", "ansible_user": "vagrant", "ansible_ssh_port": 2712 }, "kubenode02": { "ansible_host": "localhost", "ansible_user": "vagrant", "ansible_ssh_port": 2713 } }, "children": {}, "vars": {} } }
2. 验证VM内部SSH服务状态
登录到无法连接的kubenode01/02节点,执行以下命令确认SSHD服务正常:
# 检查SSHD监听端口 ss -tulpn | grep sshd # 输出应包含 0.0.0.0:22 或 [::]:22,说明监听所有网卡的22端口 # 检查防火墙规则(Ubuntu默认UFW未启用,若启用需确认22端口放行) sudo ufw status
3. 确认Vagrant配置的正确性
- 检查VM私有IP分配:登录节点后执行
ip addr show enp0s8,确认IP与Vagrantfile中定义的192.168.56.3/192.168.56.4一致; - 检查公钥配置:查看
/home/vagrant/.ssh/authorized_keys,确认包含本地~/.ssh/ansible.pub的内容,确保无格式错误。
内容的提问来源于stack exchange,提问作者Dreamystify
相关产品推荐
相关产品推荐

