虚拟机连接Xshell的核心结论:先在虚拟机里把SSH服务跑起来、把22端口放通,再到Xshell新建SSH会话,填对IP、端口和账号,就能连上。
虚拟机连接Xshell的详细步骤:本地环境一次跑通
第一步:确认虚拟机里有没有SSH服务
大部分Linux发行版默认不带OpenSSH服务,或者只带了客户端,Xshell走的是SSH协议,虚拟机里没有服务端,连接肯定失败。
在虚拟机终端执行以下命令判断:
ps -ef | grep sshd
如果输出为空或只有grep自己,说明服务端没装。
- CentOS/RHEL系安装命令:
sudo yum install -y openssh-server - Ubuntu/Debian系安装命令:
sudo apt update && sudo apt install -y openssh-server
装完后启动并设置开机自启:
sudo systemctl enable sshd --now
这里统一用sshd,部分Ubuntu新版本服务名是ssh,执行sudo systemctl status ssh也能确认。
第二步:查虚拟机IP和监听端口
在虚拟机里运行:
ip addr show
找ens33、eth0这类网卡下的inet地址,比如168.100.128,再确认22端口是否处于监听状态:
sudo ss -tlnp | grep 22
看到0.0.0:22或::22,说明服务已经监听了。
第三步:Xshell里新建会话
打开Xshell,顶部点“文件” → “新建”,会话属性里按下面填:
- 名称:随便写,比如本机虚拟机
- 协议:SSH
- 主机:填第二步查到的IP
- 端口号:22
点“连接”,首次会弹SSH安全警告,选“接受并保存”,接着输入虚拟机用户名,比如root或普通用户,再输入密码,密码不会显示在屏幕上,输完直接回车。
连接成功后命令行前缀变成虚拟机主机名,就说明已经通过Xshell进入虚拟机了。
Xshell连不上虚拟机?从网络配置到端口放行的排查顺序
Xshell连不上虚拟机是高频问题,原因多数集中在网络模式、防火墙和认证信息上,按下面顺序查,一般十分钟内能找到症结。
网络模式选NAT还是桥接?本地连接场景怎么选
虚拟机网络模式直接决定宿主机能不能用Xshell连它,两种模式差异如下:
| 对比项 | NAT模式 | 桥接模式 |
|---|---|---|
| 虚拟机IP来源 | 虚拟NAT网段分配,通常192.168.x.x | 与宿主机同网段,如192.168.1.x |
| 宿主机访问虚拟机 | 多数情况下可以直接访问 | 可以直接访问 |
| 局域网其他设备访问 | 不能主动访问 | 可以访问 |
| 适用场景 | 本机调试、自己用 | 模拟独立服务器、团队共享 |
本机连虚拟机,NAT模式足够。 如果公司网络有IP绑定限制,桥接模式可能拿不到IP,VMware Workstation、VirtualBox里都能在虚拟机设置中切换。
改完网络模式后,在虚拟机里重新执行ip addr show,IP变了就同步更新Xshell里的主机地址。
防火墙和端口放行是重灾区
很多连接失败不是网络不通,而是防火墙把22端口拦了。
Ubuntu/Debian用ufw的,执行:
sudo ufw allow 22/tcp sudo ufw reload
CentOS/RHEL用firewalld的,执行:
sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload
如果只是临时测试,可以先直接关防火墙:
sudo systemctl stop firewalld
连上后记得改回策略,别把测试环境一直暴露着。
SELinux也会干扰,尤其是CentOS,执行getenforce查看状态,如果是Enforcing,临时关闭用:
sudo setenforce 0
永久关闭需要改/etc/selinux/config,但生产环境不建议这么做,行业共识认为,多数本地调试场景下临时关闭SELinux能快速排除变量,但上线前应恢复。
账号密码和密钥认证的选择
密码登录连不上,先确认没有开键盘锁、没有输错大小写,root用户默认不允许SSH登录的情况也存在,检查/etc/ssh/sshd_config:
grep PermitRootLogin /etc/ssh/sshd_config
如果结果是no,改成yes后重启服务:
sudo systemctl restart sshd
更推荐用密钥登录,在Xshell里生成密钥对,把公钥追加到虚拟机的~/.ssh/authorized_keys,之后就能免密登录,也避免了每次输密码。
本地虚拟机连接Xshell前必须改的三处设置
虚拟机网络适配器改成NAT或桥接
新建虚拟机默认可能是“仅主机模式”,这种模式下宿主机可以访问虚拟机,但虚拟机上不了外网,部分封装工具还会限制双向流量,改成NAT后,Xshell连接成功率会明显提高。
Linux系统开启22端口并关闭SELinux干扰
除了防火墙放行,还要检查SSH服务是否绑定了正确地址,有些环境里sshd_config写了ListenAddress 127.0.0.1,这会让SSH只监听本地回环,宿主机自然连不上,把该行注释掉或改成0.0.0,重启服务。
Windows虚拟机需要打开的远程功能
Xshell主要连接Linux类系统,如果虚拟机是Windows Server或Win10/11,默认没有SSH服务,需要安装OpenSSH Server,然后在服务里启动
sshd,再用Xshell连接,Win10/11的“设置” → “应用” → “可选功能”里可以添加OpenSSH服务器。
用Xshell管理多个虚拟机的效率技巧
会话分组和快捷命令
虚拟机多了以后,Xshell会话列表会越来越乱,可以按项目或系统类型建文件夹,把会话拖进去,常用命令能保存成快捷按钮,点一下自动执行,省得反复敲。
密钥登录替代密码更省事
多台虚拟机都配置好密钥后,Xshell会按顺序尝试私钥,切换机器不用再翻密码本,连接速度也更快,密钥文件记得放在本机安全目录,别同步到网盘。
虚拟机连接Xshell这件事,核心就三块:网络通、端口开、账号对,把这三块理顺了,无论是本地VirtualBox、VMware,还是云服务器上的虚拟机,连接逻辑都一样,剩下的只是习惯问题。
虚拟机连接Xshell常见问题Q&A
虚拟机连接Xshell时总提示Connection refused怎么处理?
Connection refused说明网络能到达虚拟机,但22端口没监听,优先检查SSH服务是否启动,执行sudo systemctl status sshd,如果服务正常,再看是否监听了0.0.1而不是0.0.0,修改sshd_config后重启服务即可。
Xshell连不上本地虚拟机,但能ping通,是什么原因?
能ping通只代表网络层可达,不代表传输层22端口开放,多数情况下是虚拟机防火墙拦截,或者SSH服务只监听本机回环地址,先放行22端口,再检查监听地址。
虚拟机连接Xshell必须花钱买Xshell吗?
Xshell对个人和学校用户提供免费授权,商用需要购买许可证,免费版满足绝大多数虚拟机连接需求,付费版主要多了一些批量管理和脚本功能,虚拟机端使用的OpenSSH本身完全免费,不产生额外成本。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/652482.html





