连接Linux虚拟机最直接的方法是使用SSH(安全外壳协议),在Windows上用PowerShell或PuTTY,在macOS/Linux上直接用终端,输入ssh 用户名@IP地址即可。整个过程分三步:确认虚拟机网络模式、获取IP地址、建立SSH连接,下面按新手最容易踩坑的顺序,把每一步的操作细节和常见问题拆开讲清楚。
先搞懂虚拟机三种网络模式,避免连不上的尴尬
很多新手卡在第一步,不是命令敲错,而是虚拟机的网络模式没选对,VMware和VirtualBox都提供三种网络模式,它们的区别直接决定你能不能从宿主机连进去。
- NAT模式(默认):虚拟机通过宿主机上网,对外访问互联网没问题,但宿主机想主动连虚拟机,需要端口转发,这是新手最常用的模式,适合只需要虚拟机上网、不需要外部设备访问的场景。
- 桥接模式:虚拟机在局域网里拥有独立IP,和宿主机平级,其他电脑也能直接访问虚拟机,如果你需要让虚拟机当作一台真实服务器,供局域网测试用,选这个。
- 仅主机模式:虚拟机和宿主机组成一个封闭内网,不能访问外网,但宿主机可以稳定连接虚拟机,适合不需要联网、只做本地测试的场景。
行业共识是:新手练习SSH连接,优先用桥接模式或NAT模式配合端口转发,VMware的“虚拟网络编辑器”里可以切换模式,VirtualBox则在“设置→网络”里改,改完模式需要重启虚拟机才能生效。
获取虚拟机IP地址的三种方法
连接的前提是知道IP地址,注意,VMware里那个“IP地址”显示有时候不准,要以虚拟机系统内的实际IP为准。
命令行直接查看
进入虚拟机终端,输入:
ip addr
或者老一些的系统用:
ifconfig
找eth0或ens33这类网卡下的inet字段,形如168.x.x就是IP地址。lo回环地址不是,别搞混了。
路由表确认连通性
输入ip route,看默认网关是不是和你在同一个网段,如果网关显示不通,说明网卡配置有问题。
桌面环境查看
装了图形界面的Ubuntu或CentOS,点击右上角网络图标,在连接信息里直接能看到IPv4地址。
拿Ubuntu Server举例,安装时默认用DHCP自动分配IP,如果你要用桥接模式,建议在/etc/netplan/目录下把IP改成静态的,文件一般是01-network-manager-all.yaml,改完后执行sudo netplan apply让配置生效。
Windows怎么连接Linux虚拟机:SSH实操步骤
确认IP后,在Windows 10/11上不需要额外装软件,系统自带OpenSSH客户端。
-
打开PowerShell或CMD,输入:
ssh 用户名@IP地址
比如
ssh root@192.168.1.100。 -
第一次连接会提示确认主机指纹,输入
yes回车。 -
输入密码,注意,Linux终端输密码是不显示任何字符的,别以为键盘坏了。
-
看到
Welcome to Ubuntu或类似的欢迎信息,就说明连接成功了。
用macOS或Linux系统的用户,直接打开终端,命令完全一样。
用PuTTY连接的情况:有些Windows版本没装OpenSSH,或者你想保存多个连接配置,可以用PuTTY,下载绿色版后,Host Name填IP,Port填22,Connection type选SSH,点Open,然后输入用户名密码,PuTTY的优势在于能保存会话,下次双击直接连。
Windows下还有个细节:新版Windows Terminal比传统CMD好用得多,支持多标签、复制粘贴快捷键也更顺手,建议用这个。
常见故障排查:linux虚拟机连不上ssh的六大原因
敲了ssh命令后卡住不动,或者直接报错Connection refused、Connection timed out,别慌,按下面顺序依次检查。70%以上的连接失败都出在SSH服务没启动和防火墙拦截这两块。
检查顺序和对应命令:
| 故障现象 | 检查项 | 排查命令 | 解决方式 |
|---|---|---|---|
| Connection refused | SSH服务是否运行 | systemctl status sshd |
sudo systemctl start sshd |
| Connection refused | SSH服务是否开机自启 | systemctl is-enabled sshd |
sudo systemctl enable sshd |
| Connection timed out | 防火墙拦截22端口 | sudo ufw status |
sudo ufw allow 22/tcp |
| Connection timed out | 虚拟机和宿主机网络不通 | ping 宿主机IP |
检查VMware网络模式是否一致 |
| 密码明明对却进不去 | 是否允许root登录 | 检查/etc/ssh/sshd_config |
将PermitRootLogin改为yes(不推荐生产环境) |
| 连接后立刻断开 | IP地址冲突 | ip addr检查网卡IP |
重启网络服务或改用静态IP |
具体操作说明:
第一步,确认虚拟机装了SSH服务,Ubuntu Server默认装了openssh-server,但Ubuntu桌面版默认没装,如果没装,执行:
sudo apt update sudo apt install openssh-server -y
CentOS/RHEL系用sudo yum install openssh-server -y。
第二步,确认服务在跑,执行systemctl status sshd,看到active (running)是正常的,如果显示inactive (dead),先启动服务再设成开机自启。
第三步,关防火墙或放行22端口,Ubuntu用ufw,执行sudo ufw allow 22/tcp,CentOS用firewall-cmd,执行:
sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload
第四步,检查网络模式,这是最容易被忽视的地方,VMware里把网络模式改成桥接后,虚拟机可能还保留着原来的NAT IP,需要重启虚拟机或执行sudo dhclient重新获取IP。
最后确认宿主机和虚拟机互通:在宿主机Ping虚拟机的IP,如果Ping通了连不上SSH,问题在SSH服务或端口;如果Ping不通,问题在网络配置,回第一步重新检查。
进阶:配置SSH密钥登录,免密更安全
密码登录虽然简单,但每次都要输密码,而且root密码暴露在公网上容易被暴力破解,行业共识是用SSH密钥对替代密码登录。
操作分三步:
-
在宿主机生成密钥对(Windows PowerShell或macOS终端):
ssh-keygen -t rsa -b 4096
一路回车,默认保存到
~/.ssh/id_rsa,公钥是id_rsa.pub,私钥自己留着别给别人。 -
把公钥复制到虚拟机:
ssh-copy-id 用户名@IP地址
Windows没有
ssh-copy-id命令,可以手动操作:读一下id_rsa.pub,复制到虚拟机的~/.ssh/authorized_keys文件里。 -
修改SSH配置文件禁用密码登录(可选):
sudo vi /etc/ssh/sshd_config
把
PasswordAuthentication改成no,重启SSH服务生效,这样暴力破解就没戏了。
密钥登录配置好后,日常操作体验会好很多,尤其适合需要频繁管理多台Linux服务器的场景。
没有桌面环境怎么连接:无头服务器的连接技巧
很多Linux服务器为了节省资源不装图形界面,装完后黑屏一个终端,这种情况下,你依然可以用SSH连接它,前提是装系统时选装了openssh-server。
连接方式和前面完全一样,唯一需要注意的是,无头服务器的IP地址获取方式,安装系统时如果选的DHCP,路由器分配的IP可能会变,建议在路由器后台绑定MAC地址,或者在系统安装时直接配静态IP。
某些云计算平台和VPS厂商(比如简米云、酷番云、AWS),默认不允许root直接SSH登录,需要用普通用户登录后再su -切换,或者先在网页控制台里改好SSH配置。国内云服务器,新人往往容易卡在这一步安全组没放行22端口,控制台上要单独配置安全组规则。
常见问题Q&A
Q:虚拟机和宿主机能互相ping通,但SSH连接总是超时,是怎么回事?
A:检查虚拟机的防火墙是否拦截了22端口,执行sudo ufw status或sudo firewall-cmd --list-all,部分云镜像默认开启了SELinux,执行getenforce确认是否Enforcing模式,临时测试可以setenforce 0。
Q:NAT模式下怎么让宿主机直接SSH连接虚拟机?
A:NAT模式下需要设置端口转发,VMware在“编辑→虚拟网络编辑器→NAT设置”里,添加一条规则,宿主机端口映射到虚拟机22端口,VirtualBox在“设置→网络→高级→端口转发”里配置,宿主机访问localhost:映射端口即可。
Q:ssh端口还是2万,怎么切换?
A:修改/etc/ssh/sshd_config里的Port字段,改成比如22222,重启SSH服务,然后宿主机连接时指定端口:ssh -p 22222 用户@IP,注意防火墙放行新端口。
如果连不上,先从这几件事入手:确认虚拟机网络模式、确认SSH服务状态、确认防火墙规则,这三项检查完毕后,绝大多数连接问题都能定位到根因,掌握了SSH连接,后续的文件传输、远程运维、跑服务都顺手了。