在学校服务器上为CentOS Linux虚拟机开放Shell连接端口(如60000)给同学们访问,主要涉及两大步骤:一是在虚拟机内部配置防火墙,二是在Windows宿主机上设置端口转发。由于虚拟机通常使用NAT模式网络,外部无法直接访问,因此端口转发是关键。

下面我为你整理了详细的操作流程和注意事项。

🔧 虚拟机内部配置(CentOS 7/8/9)

首先,你需要在CentOS虚拟机内部开放端口并确保SSH服务正常。

1.开启防火墙并放行端口
使用firewalld防火墙管理工具执行以下命令

# 检查防火墙状态,确认处于running状态
sudo firewall-cmd --state

# 永久开放60000/tcp端口(用于SSH连接)
sudo firewall-cmd --zone=public --add-port=60000/tcp --permanent

# 重载防火墙配置使规则生效
sudo firewall-cmd --reload

# 验证端口是否开放成功
sudo firewall-cmd --list-ports

2.配置SSH服务使用60000端口
默认SSH端口是22,你需要修改为60000。

# 编辑SSH配置文件
sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,去掉注释#,并将数字22改为60000。如果找不到,直接在文件内添加一行 Port 60000
保存退出后,重启SSH服务:

sudo systemctl restart sshd

你可以使用 sudo netstat -lntp | grep 60000 或 sudo ss -lntp | grep 60000 来确认SSH服务正在监听60000端口

🌐 Windows宿主机端口转发

因为虚拟机是NAT模式,需要在Windows服务器上设置端口转发规则,将外部对宿主机某个端口(例如60000)的访问,转发到虚拟机的60000端口。

  1. 查询虚拟机的IP地址
    在CentOS虚拟机中执行 ip addr 或 ifconfig 命令,找到 eth0 或 ens33 等主要网络接口,记录其IP地址(例如 192.168.122.100)。
  2. 以管理员身份运行PowerShell
    在Windows服务器上,务必以管理员身份打开PowerShell。
  3. 执行端口转发命令
    使用 netsh 命令添加转发规则。假设虚拟机IP为 192.168.122.100
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=60000 connectaddress=192.168.122.100 connectport=60000
  • listenaddress=0.0.0.0 表示监听所有网络接口上的连接。
  • listenport=60000 是宿主机对外开放的端口。
  • connectaddress 是虚拟机的IP地址。
  • connectport 是虚拟机内部开放的端口(SSH端口)。

4.开放Windows防火墙端口
为了让外部流量能访问宿主机的60000端口,你需要在Windows Defender防火墙中添加入站规则,允许TCP端口60000

✅ 验证连接与注意事项

完成以上设置后,同学们就可以使用Xshell、PuTTY等SSH客户端连接了。

  • 连接地址你们的Windows服务器IP地址:60000
  • 端口60000
  • 用户名/密码:CentOS虚拟机内的用户凭证。

你可以先在服务器本机使用 telnet localhost 60000 测试转发规则是否生效。

重要注意事项:

  • 网络模式:确保虚拟机网络连接方式为NAT模式
  • IP地址稳定性:虚拟机的IP地址最好是静态的。你可以在虚拟机网络设置中配置静态IP,或直接在Windows的Virtual Network Editor中为虚拟机设置端口转发时指定IP,防止IP变更导致转发失效。
  • 安全考虑:向校园网开放端口需注意安全。建议:
    • 使用强密码或密钥认证。
    • 考虑将默认SSH端口改为非标准端口(如你计划的60000)也是一种安全实践。
    • 如果同学IP范围固定,可在防火墙设置源IP限制。

🚧 替代方案与故障排查

  • 如果使用VMware Workstation:除了使用netsh命令,也可以在虚拟机网络设置的“NAT设置”中直接添加端口转发规则
  • 如果连接失败
    • 检查防火墙状态:确认CentOS的firewalld和Windows防火墙都已正确配置。
    • 检查端口监听:在CentOS上使用 netstat -tuln | grep 60000 确认SSH在监听
    • 检查转发规则:在Windows PowerShell中用 netsh interface portproxy show all 查看已设置的转发规则。
    • 检查虚拟机网络:确保虚拟机可以正常上网(Ping通外网)。