☰
CentOS 7 上通过 Xshell 与 Xftp 搭建 JDK、Tomcat、MySQL 环境全流程
2026/10/17 7:40:34 网站建设 项目流程

1. 环境准备与工具选型背后的逻辑

1.1 为什么是这套组合:CentOS 7 + Xshell + Xftp

先把场景说清楚。手头有一台本地虚拟机,跑的是 CentOS 7 系统,日常开发或者学习时需要把本地写好的文件传到虚拟机里,还要在虚拟机上装 JDK、Tomcat、MySQL 这套经典的 Java Web 运行环境。这个流程在几年前几乎是每个 Java 后端入门的必修课,即便现在容器化很流行,理解这套底层操作依然有价值,因为很多企业的遗留系统、内网测试环境还是这么跑的。

工具层面,Xshell 负责终端连接,Xftp 负责文件传输,两者配合使用体验很顺。为什么不用系统自带的终端或者别的工具?因为 Xshell 支持会话管理、多标签、日志记录、快捷键自定义,长时间操作比系统终端舒服很多。Xftp 则是图形化的 SFTP 客户端,拖拽上传、断点续传、权限修改都很直观,比命令行 scp 更适合频繁传文件的场景。

CentOS 7 这个版本值得单独提一句。它的生命周期已经进入尾声,但大量教程、生产环境、考试环境仍然基于它,原因是稳定、软件包版本保守、社区资料极其丰富。新手拿它练手,遇到问题几乎都能搜到答案,这是它最大的优势。

1.2 虚拟机网络模式的选择与影响

在连接之前,有个容易被忽略但极其关键的环节:虚拟机的网络模式。常见的有 NAT、桥接、仅主机三种。选错了,Xshell 根本连不上。

  • NAT 模式:虚拟机和宿主机共享一个网络出口,虚拟机会被分配一个内网 IP,宿主机可以访问虚拟机,虚拟机也能访问外网。缺点是局域网内其他机器访问不到这台虚拟机。适合个人学习。
  • 桥接模式:虚拟机会像一台独立设备一样接入物理网络,获得和宿主机同网段的 IP,局域网内其他设备可以直接访问。适合需要模拟真实服务器的场景。
  • 仅主机模式:虚拟机和宿主机组成一个封闭网络,虚拟机不能上外网。适合纯隔离测试。

我个人的建议是:如果只是自己学习,NAT 模式最省事,不用操心 IP 冲突;如果想让手机或者其他电脑也能访问虚拟机上的服务,那就用桥接。选好模式后,记得在虚拟机里用ip addr或者ifconfig确认一下 IP 地址,后面 Xshell 连接要用。

提示:CentOS 7 最小化安装默认可能没有ifconfig命令,用ip addr更稳妥。如果网卡没起来,检查/etc/sysconfig/network-scripts/ifcfg-ens33里的ONBOOT是否改成了yes。

1.3 连接前的检查清单

动手连之前,花两分钟做几个检查,能省掉后面半小时的排查时间。

  1. 虚拟机是否已经开机,并且网络适配器已连接。
  2. 虚拟机 IP 地址是否确认,能否在宿主机 ping 通。
  3. SSH 服务是否运行,CentOS 7 默认装了 OpenSSH,但防火墙可能挡着。
  4. 防火墙状态,systemctl status firewalld看一下,如果开着,22 端口是否放行。
  5. 登录用的账号密码是否记得,root 账号是否允许远程登录。

这几项里,防火墙和 SSH 配置是最容易出问题的。很多人连不上第一反应是 Xshell 有问题,其实八成是虚拟机这边防火墙没放行,或者 sshd 服务没启动。

2. Xshell 远程连接 CentOS 7 的完整实操

2.1 新建会话与关键参数填写

打开 Xshell,点左上角新建会话,弹出配置窗口。这里有几个参数必须填对:

  • 名称:随便起,建议用“CentOS7-学习”这种能一眼看懂的。
  • 协议:选 SSH,端口默认 22。如果之前改过 sshd 端口,这里要对应改。
  • 主机:填虚拟机的 IP 地址,比如 192.168.1.100。
  • 端口:22。

填完这些,先别急着连,点左侧的“用户身份验证”。这里填登录虚拟机的用户名和密码。用户名一般是 root,或者你自己创建的普通用户。密码就是对应的登录密码。填好后点确定保存。

注意:如果虚拟机里 root 账号不允许远程登录(有些安全加固会禁用),你需要先用普通用户登录,再su -切到 root,或者修改/etc/ssh/sshd_config里的PermitRootLogin参数。

2.2 首次连接的主机密钥确认

第一次连接某台主机时,Xshell 会弹出一个窗口,提示“SSH 安全警告”,让你确认主机密钥。这是 SSH 协议的正常机制,用来防止中间人攻击。你确认 IP 没错,点“接受并保存”就行。保存之后,下次再连就不会弹了。

如果哪天虚拟机的系统重装了,或者 SSH 密钥变了,Xshell 会再次弹窗并提示密钥不匹配。这时候不要慌,去 Xshell 的“工具”菜单里找到“主机密钥管理”,把旧的那条删掉,重新连接即可。

2.3 连接成功后的基础环境确认

连上之后,你会看到一个命令行界面,提示符大概是[root@localhost ~]#。先跑几条命令确认环境:

# 查看系统版本 cat /etc/redhat-release # 查看内核版本 uname -r # 查看 IP 地址 ip addr # 查看磁盘空间 df -h # 查看内存 free -h

这几条命令能让你对这台虚拟机的状态心里有数。特别是磁盘空间,后面装 JDK、Tomcat、MySQL 都要占地方,如果根分区只剩几百兆,那得先扩容或者清理。

2.4 连接不稳定时的排查思路

有时候连上了,但操作一会儿就卡住或者断开。常见原因有几个:

  • 虚拟机内存太小:CentOS 7 图形界面至少 2G 内存,命令行 1G 勉强够。如果只有 512M,跑起来会很吃力。
  • 宿主机资源紧张:宿主机同时跑太多程序,虚拟机抢不到 CPU 和内存。
  • 网络模式问题:NAT 模式下宿主机网络波动会影响虚拟机。
  • SSH 超时设置:可以在 Xshell 会话属性里把“保持活动”勾上,每隔几十秒发个空包,防止被防火墙断开。

我自己的经验是,给虚拟机分配 2 核 CPU、2G 内存、40G 硬盘,跑这套环境比较舒服。低于这个配置,装 MySQL 的时候可能会卡到怀疑人生。

3. Xftp 文件上传与目录规划

3.1 Xftp 连接与界面速览

Xftp 的连接配置和 Xshell 几乎一样,新建会话,填 IP、端口、用户名、密码。连上之后,界面分成左右两栏:左边是本地文件系统,右边是远程虚拟机的文件系统。中间有上传、下载、传输队列等按钮。

这个双栏设计很直观,左边找到文件,右边找到目标目录,双击或者拖拽就能传。传输过程中底部会显示进度和速度,大文件还能看到剩余时间。

3.2 上传前的目录规划建议

很多人传文件是随手拖到/root或者/tmp,当时方便,后面找起来费劲。我建议提前规划好目录结构,比如:

  • /opt/software:放各种安装包,JDK、Tomcat、MySQL 的压缩包都扔这里。
  • /opt/module:放解压后的软件目录,JDK、Tomcat 解压到这里。
  • /opt/data:放 MySQL 的数据文件,方便单独备份和迁移。
  • /opt/logs:放 Tomcat 等应用的日志。

这样规划的好处是,所有第三方软件集中管理,不会和系统自带的文件混在一起。以后要卸载或者迁移,直接删对应目录就行,干净利落。

# 在虚拟机上提前创建好目录 mkdir -p /opt/software /opt/module /opt/data /opt/logs

3.3 上传操作与权限处理

把本地下载好的 JDK、Tomcat、MySQL 安装包通过 Xftp 拖到/opt/software目录。传输完成后,在 Xshell 里ls -lh看一下文件大小是否和本地一致,防止传输中断导致文件损坏。

有时候上传会报权限错误,这是因为目标目录当前用户没有写权限。解决办法有两个:一是用 root 账号连接 Xftp,二是提前给目录赋权。我一般直接用 root 操作,省事。

提示:Xftp 传输大文件时,如果中途网络断了,重新连接后可以尝试续传。但为了保险,传完后用md5sum对比一下本地和远程的文件校验值,确保文件完整。

3.4 文件传输的替代方案与对比

虽然 Xftp 图形化很方便,但有些场景下命令行更高效。比如批量传大量小文件,或者需要在脚本里自动化传输,这时候scp和rsync更合适。

方式适用场景优点缺点
Xftp日常零散文件传输图形化,拖拽方便,支持断点续传需要额外开图形界面
scp单次传输少量文件命令简单,系统自带不支持断点续传,大文件中断要重来
rsync大量文件同步、增量传输增量传输,速度快,可保留权限参数较多,需要学习

我个人的习惯是:装环境这种一次性传几个大压缩包的场景,用 Xftp 最舒服;如果是日常开发中频繁同步代码或者配置文件,用 rsync 写个脚本更省心。

4. JDK 安装与环境变量配置

4.1 选择哪个 JDK 版本

标题里写的是“jdk4”,这个说法其实不太准确。JDK 的版本命名经历过几次变化,早期有 JDK 1.4、JDK 5、JDK 6 这种叫法,后来改成 JDK 8、JDK 11、JDK 17 这种。如果真的是 JDK 1.4,那已经是二十多年前的版本了,现在几乎没人用,而且很多新软件也不支持。

结合 Tomcat 和 MySQL 这套组合,我推测实际场景大概率是JDK 8,因为 JDK 8 是 Java Web 开发里最经典、最稳定的版本,Tomcat 7/8/9 和 MySQL 5.7/8.0 都跟它配合得很好。下面我就以 JDK 8 为例来写,如果你确实需要其他版本,把下载链接和目录名换掉即可,步骤完全一样。

4.2 安装包上传与解压

假设你已经通过 Xftp 把jdk-8uXXX-linux-x64.tar.gz传到了/opt/software。接下来在 Xshell 里操作:

# 进入软件目录 cd /opt/software # 解压到 /opt/module tar -zxvf jdk-8uXXX-linux-x64.tar.gz -C /opt/module/ # 查看解压结果 ls /opt/module/

解压完成后,/opt/module下会多出一个类似jdk1.8.0_XXX的目录。为了后续配置方便,可以给它改个短一点的名字:

mv /opt/module/jdk1.8.0_XXX /opt/module/jdk8

这样以后引用路径就是/opt/module/jdk8,简洁明了。

4.3 环境变量配置的两种方式

配置 JDK 环境变量,本质上是告诉系统去哪里找java、javac这些命令。有两种常见做法:

方式一:修改/etc/profile,对所有用户生效。适合这台机器上多个用户都需要用 JDK 的场景。

# 编辑 profile 文件 vi /etc/profile # 在文件末尾添加以下内容 export JAVA_HOME=/opt/module/jdk8 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

方式二:修改用户目录下的~/.bash_profile,只对当前用户生效。适合多用户环境下各用各的 JDK 版本。

两种方式选一种即可,改完后执行source /etc/profile或者重新登录,让配置生效。

注意:CLASSPATH里的.表示当前目录,这个不能少,否则运行某些 Java 程序时会找不到当前目录下的类文件。另外$JAVA_HOME/bin要放在$PATH前面,避免系统自带的旧版本 java 被优先找到。

4.4 验证安装与常见报错

配置完成后,跑几条命令验证:

# 查看 java 版本 java -version # 查看 javac 版本 javac -version # 查看 JAVA_HOME echo $JAVA_HOME

如果java -version输出的版本和你装的一致,说明配置成功。如果提示command not found,检查PATH是否写对,JAVA_HOME路径是否存在。

常见报错还有一个:Error: could not open .../lib/...,这通常是CLASSPATH配置有问题,或者 JDK 解压不完整。重新解压一遍,仔细核对路径。

5. Tomcat 部署与启动验证

5.1 Tomcat 版本选择与解压

Tomcat 的版本和 JDK 版本有对应关系。大致来说:

  • Tomcat 7 支持 JDK 6 及以上
  • Tomcat 8 支持 JDK 7 及以上
  • Tomcat 9 支持 JDK 8 及以上
  • Tomcat 10 开始使用 Jakarta EE 命名空间,和旧项目兼容性要注意

既然我们装的是 JDK 8,选 Tomcat 8 或者 Tomcat 9 都可以。Tomcat 9 更现代一些,推荐用它。

# 解压 Tomcat cd /opt/software tar -zxvf apache-tomcat-9.0.XX.tar.gz -C /opt/module/ # 改名 mv /opt/module/apache-tomcat-9.0.XX /opt/module/tomcat9

5.2 启动 Tomcat 与端口检查

Tomcat 的启动脚本在bin目录下:

cd /opt/module/tomcat9/bin ./startup.sh

启动后,用ps或者netstat确认进程和端口:

# 查看 Tomcat 进程 ps -ef | grep tomcat # 查看 8080 端口是否监听 netstat -tlnp | grep 8080

如果 8080 端口没起来,去看logs/catalina.out日志,里面会有具体报错。最常见的原因是 JDK 环境变量没配好,Tomcat 找不到 Java。

5.3 防火墙放行与浏览器访问

Tomcat 默认监听 8080 端口,但 CentOS 7 的防火墙默认可能没放行这个端口。需要在虚拟机上执行:

# 放行 8080 端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent # 重新加载防火墙配置 firewall-cmd --reload # 查看已放行的端口 firewall-cmd --list-ports

然后在宿主机的浏览器里访问http://虚拟机IP:8080,如果看到 Tomcat 的欢迎页面,说明部署成功。

提示:如果访问不了,先确认虚拟机和宿主机之间网络是否通,再确认防火墙是否放行,最后看 Tomcat 日志。这三步能解决 90% 的访问问题。

5.4 配置 Tomcat 开机自启

每次手动启动 Tomcat 太麻烦,可以配置成系统服务,开机自动启动。创建一个 service 文件:

vi /etc/systemd/system/tomcat.service

写入以下内容:

[Unit] Description=Tomcat Service After=network.target [Service] Type=forking Environment=JAVA_HOME=/opt/module/jdk8 ExecStart=/opt/module/tomcat9/bin/startup.sh ExecStop=/opt/module/tomcat9/bin/shutdown.sh [Install] WantedBy=multi-user.target

然后执行:

systemctl daemon-reload systemctl enable tomcat systemctl start tomcat

这样 Tomcat 就会随系统启动,管理起来也方便。

6. MySQL 安装与初始化配置

6.1 安装方式选择:Yum 还是二进制包

MySQL 在 CentOS 7 上有几种安装方式:

  • Yum 安装:最简单,一条命令搞定,但版本可能比较旧,而且 CentOS 7 默认源里是 MariaDB,不是 MySQL。
  • 二进制包安装:下载官方编译好的 tar.gz 包,解压配置即可,版本可控,适合学习。
  • RPM 包安装:下载官方 RPM 包,用rpm或yum localinstall安装,管理方便。

我推荐用二进制包安装,因为过程透明,能学到东西,而且版本可以自己选。下面以 MySQL 5.7 为例。

6.2 卸载冲突软件与依赖检查

CentOS 7 默认可能装了 MariaDB,会和 MySQL 冲突,先检查并卸载:

# 查看是否安装了 mariadb rpm -qa | grep mariadb # 如果有,卸载掉 rpm -e --nodeps mariadb-libs-XXX

另外,MySQL 运行需要libaio库,先确认是否安装:

rpm -qa | grep libaio

如果没有,用yum install -y libaio装上。

6.3 解压、用户创建与目录授权

# 解压 MySQL 到 /opt/module cd /opt/software tar -xvf mysql-5.7.XX-linux-glibc2.12-x86_64.tar.gz -C /opt/module/ # 改名 mv /opt/module/mysql-5.7.XX-linux-glibc2.12-x86_64 /opt/module/mysql57 # 创建 mysql 用户组和用户 groupadd mysql useradd -r -g mysql mysql # 创建数据目录并授权 mkdir -p /opt/data/mysql chown -R mysql:mysql /opt/module/mysql57 chown -R mysql:mysql /opt/data/mysql

用专门的 mysql 用户运行数据库,是安全实践的基本要求。不要用 root 跑数据库,万一被攻破,影响范围会小很多。

6.4 初始化数据库与配置文件

# 进入 MySQL 目录 cd /opt/module/mysql57 # 初始化数据库 bin/mysqld --initialize --user=mysql --basedir=/opt/module/mysql57 --datadir=/opt/data/mysql

初始化完成后,会生成一个临时密码,在输出日志里能找到,类似A temporary password is generated for root@localhost: XXXX。这个密码要记下来,第一次登录要用。

接下来创建配置文件/etc/my.cnf:

[mysqld] basedir=/opt/module/mysql57 datadir=/opt/data/mysql socket=/tmp/mysql.sock port=3306 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci [client] socket=/tmp/mysql.sock default-character-set=utf8mb4

字符集设成utf8mb4是为了支持完整的 Unicode,包括 emoji。如果用默认的latin1,中文会乱码。

6.5 启动 MySQL 与修改初始密码

# 启动 MySQL cd /opt/module/mysql57 bin/mysqld_safe --user=mysql & # 登录 bin/mysql -uroot -p # 输入临时密码后,修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; # 允许 root 从任意主机连接(可选,学习环境方便) UPDATE mysql.user SET Host='%' WHERE User='root'; FLUSH PRIVILEGES;

改完密码后,退出重新登录,验证新密码是否生效。

注意:生产环境不要开放 root 远程登录,应该创建专门的用户并授予最小必要权限。学习环境图方便可以开,但心里要有数。

6.6 防火墙放行与远程连接测试

和 Tomcat 一样,MySQL 的 3306 端口也需要防火墙放行:

firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload

然后在宿主机上用 MySQL 客户端工具连接虚拟机的 3306 端口,测试是否能连上。如果连不上,检查防火墙、MySQL 用户权限、以及my.cnf里是否绑定了127.0.0.1。

7. 常见问题速查与避坑经验

7.1 连接类问题排查表

现象可能原因排查方法
Xshell 连接超时虚拟机 IP 不对、网络不通宿主机 ping 虚拟机 IP
连接被拒绝SSH 服务未启动、端口不对systemctl status sshd,检查端口
密码正确但登录失败root 禁止远程登录检查sshd_config的PermitRootLogin
连接后频繁断开网络不稳定、SSH 超时开启 Xshell 保持活动功能
Xftp 上传报权限错误目标目录无写权限用 root 连接或提前赋权

7.2 软件安装类问题排查表

现象可能原因排查方法
java 命令找不到环境变量未生效source /etc/profile,检查 PATH
Tomcat 启动后 8080 不通防火墙未放行firewall-cmd --list-ports
Tomcat 启动报 JAVA_HOME 错误JDK 路径配置不对检查setclasspath.sh里的 JAVA_HOME
MySQL 初始化失败数据目录非空、权限不对清空数据目录,检查属主
MySQL 中文乱码字符集不是 utf8mb4检查my.cnf配置
MySQL 远程连不上用户 Host 限制、防火墙检查 user 表 Host 字段和防火墙

7.3 我踩过的几个坑

第一个坑是虚拟机 IP 会变。NAT 模式下,虚拟机重启后 DHCP 可能分配一个新 IP,Xshell 里存的旧会话就连不上了。解决办法是把虚拟机网卡配置成静态 IP,在/etc/sysconfig/network-scripts/ifcfg-ens33里设置BOOTPROTO=static,然后手动指定 IP、网关、DNS。

第二个坑是SELinux 拦截。CentOS 7 默认开启 SELinux,有时候防火墙放行了,但 SELinux 还是挡着。临时关闭可以用setenforce 0,永久关闭改/etc/selinux/config里的SELINUX=disabled。不过生产环境不建议直接关,应该配置相应的策略。

第三个坑是Tomcat 启动慢。第一次启动 Tomcat 时,可能会卡在Deploying web application directory很久,这是因为熵池不够。可以装rng-tools或者配置java.security里的随机源来解决。学习环境忍一忍就过去了,生产环境要处理。

第四个坑是MySQL 密码策略。MySQL 5.7 默认有密码强度要求,如果设的密码太简单,会报Your password does not satisfy the current policy requirements。可以临时降低策略,或者直接设一个复杂点的密码。

7.4 环境搭建完成后的验证清单

全部装完后,按这个清单过一遍,确保每个环节都正常:

  1. Xshell 能正常连接虚拟机,执行命令无卡顿。
  2. Xftp 能正常上传下载文件。
  3. java -version输出正确版本。
  4. javac -version输出正确版本。
  5. Tomcat 进程存在,8080 端口监听,浏览器能访问欢迎页。
  6. MySQL 进程存在,3306 端口监听,能本地登录。
  7. 防火墙放行了 8080 和 3306 端口。
  8. 虚拟机重启后,Tomcat 和 MySQL 能自动启动(如果配置了自启)。

这套环境搭下来,快的话一两个小时,慢的话可能折腾半天。但把每个环节的原理搞清楚,以后再遇到类似场景,就是复制粘贴的事了。我个人在实际操作中的体会是,最耗时间的往往不是安装本身,而是网络和权限问题。把虚拟机的网络模式、防火墙规则、目录权限这三样提前理清楚,后面会顺很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询