SSH连接multipass虚拟机提示Resource temporarily unavailable如何解决
问题排查与解决步骤
核心原因确认
Multipass默认创建的实例使用NAT虚拟网络,分配的10.136.x网段是仅宿主机可访问的内部子网,外部设备(同局域网其他电脑、Github Action服务器)没有路由能到达该子网,这是故障的根本原因,和你已经排查的防火墙、SSH服务配置无关。
你可以先执行以下命令验证当前Multipass的网络驱动模式:multipass get local.driver
如果返回值为qemu/lxd,即可确认是默认NAT网络模式。
解决方法
方案1:端口映射(推荐,配置简单)
将宿主机的指定端口映射到虚拟机的22端口,外部设备通过访问宿主机IP+映射端口连接实例:
- 新创建实例时直接指定端口映射:
multipass launch --name <你的实例名> --port 2222:22
上述命令将宿主机2222端口映射到虚拟机22端口 - 已有实例可通过宿主机iptables配置转发规则:
# 开启宿主机IP转发 echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf && sudo sysctl -p # 配置端口转发规则 sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 10.136.38.199:22 sudo iptables -t nat -A POSTROUTING -p tcp -d 10.136.38.199 --dport 22 -j MASQUERADE
配置完成后,外部设备的SSH连接命令修改为:ssh -vvv -i back_key ubuntu@<宿主机的局域网/公网IP> -p 2222
方案2:桥接网络(适合同局域网设备访问场景)
将实例直接桥接到宿主机物理网卡,实例会获取和宿主机同网段的局域网IP,同局域网下所有设备可直接访问:
- 先查看宿主机物理网卡名称,执行
ip addr找到你正在使用的物理网卡(通常命名为eno1/eth0/wlan0等) - 新创建实例时指定桥接配置:
multipass launch --name <你的实例名> --network bridge=<你的物理网卡名> - 已有实例可执行以下命令追加桥接网卡:
multipass set local.bridged-network=<你的物理网卡名> multipass network attach bridged <你的实例名>
配置完成后用multipass list查看实例获取的同网段IP,直接用该IP做SSH连接即可。
额外注意事项
- 如果你需要从Github Action访问该实例,你的宿主机必须拥有公网IP,或者通过内网穿透工具将映射的2222端口暴露到公网,否则Github的公共服务器无法访问到你的内网设备
- 配置完成后如果仍有连接问题,可执行
ss -tulpn | grep 2222检查宿主机的映射端口是否被其他进程占用
内容的提问来源于stack exchange,提问作者Hamza Ince
相关产品推荐
相关产品推荐

