Linux VPS 常用运维操作:SSH 登录、密钥免密、改端口、重置 MySQL 密码、封禁邮件端口
拿到一台 Linux VPS 之后,最常做的几件事是:用 SSH 连上去、配好密钥免密登录、必要时改掉默认端口、偶尔重置数据库密码、以及关掉邮件端口避免被机房投诉。 本文把这几项整理成一份可直接复制执行的手册,命令区分了 systemd 与旧版 init 系统、以及不同 MySQL 版本的写法。
如何通过 SSH 连接到 Linux 服务器?
各平台的常用工具:
| 系统 | 推荐方式 |
|---|---|
| macOS / Linux | 系统自带终端,直接用 ssh 命令 |
| Windows 10 及以上 | 自带 OpenSSH,在 PowerShell 或终端里直接用 ssh 命令 |
| Windows(图形化) | PuTTY、Xshell、MobaXterm |
| Android | JuiceSSH、Termux |
| iOS | Termius、Blink Shell |
最简单的方式是命令行,Windows 10 之后已不再需要额外装客户端:
# 默认 22 端口
ssh root@123.123.123.123
# 指定端口
ssh -p 60022 root@123.123.123.123
输入密码时屏幕不会显示任何字符(连星号都没有),这是正常的,输完直接回车即可。
首次连接会提示确认服务器指纹,输入 yes 回车。
用 PuTTY 连接(图形化)
从 putty.org 下载最新版本。注意不要使用来路不明的老版本安装包——PuTTY 早期版本存在已知安全漏洞。
填入服务器 IP 与端口,点 Open 即可:




再次提醒:输入密码时不显示任何字符。


如何配置 SSH 密钥免密登录?
配置之后,两台机器之间就可以免密执行 ssh、scp 以及各类基于 SSH 的自动化脚本,不必再反复输入密码——这也是比密码登录更安全的做法。

推荐做法,本地如果还没有密钥先生成一对:
# 已有 ~/.ssh/id_ed25519.pub 可跳过
ssh-keygen -t ed25519 -C "你的备注"
然后一条命令推送到目标服务器:
ssh-copy-id root@123.123.123.123
# 非默认端口
ssh-copy-id -p 60022 root@123.123.123.123
ssh-copy-id 会自动处理 .ssh 目录创建和权限设置,是最省事的方式。
如果系统里没有 ssh-copy-id(部分精简镜像),可以用这条等价命令:
ssh root@123.123.123.123 'test -d .ssh || mkdir -m 0700 .ssh ; cat >> .ssh/authorized_keys && chmod 0600 .ssh/authorized_keys' < ~/.ssh/id_ed25519.pub
需要双向免密,就在对方机器上同样操作一次,IP 换成本机地址。用户名不是 root 时,替换命令里的 root 即可。
配置成功后建议进一步关闭密码登录,具体见服务器基础安全配置。
能 ping 通但 SSH 连不上,怎么办?
这种情况通常不是机器挂了。常见原因有三类:
- SSH 端口被封锁——IP 能通但特定端口不通,换个端口往往就恢复了。
- SSH 服务未运行或防火墙拦截。
- 服务器负载过高导致无法建立新连接。
针对第一类,修改 SSH 端口即可。前提是你还能登进去——如果已经完全连不上,需要通过控制台的 VNC / Lish 等带外方式登录,或者从另一台能连通的服务器中转。
编辑配置文件:
vi /etc/ssh/sshd_config
找到 Port 22 这一行,改成你想要的端口号(建议 1024–65535 之间)。如果该行以 # 开头,要把 # 去掉,否则不生效。
Port 60022
保存后重启服务:
# systemd 系统(CentOS 7+ / Debian 8+ / Ubuntu 16.04+,目前绝大多数)
systemctl restart sshd
# 旧版 init 系统
/etc/init.d/sshd restart
两个容易踩的坑:
-
防火墙要放行新端口,否则改完就再也连不上了:
# firewalld(CentOS/RHEL/Rocky/Alma) firewall-cmd --permanent --add-port=60022/tcp && firewall-cmd --reload # ufw(Ubuntu/Debian) ufw allow 60022/tcp -
SELinux 开启时需要额外声明(CentOS/RHEL 系常见):
semanage port -a -t ssh_port_t -p tcp 60022
强烈建议:改完端口后不要关闭当前会话,另开一个终端用新端口测试连接成功,再退出原会话。否则一旦配置有误,你会把自己锁在外面。
忘记 MySQL root 密码,如何重置?
不同版本的 MySQL 语法差异很大,用错版本的命令会直接报错。先确认版本:
mysql --version
第一步(所有版本通用),以跳过权限验证的方式启动:
# 停止服务
systemctl stop mysqld # 或 systemctl stop mysql
# 跳过权限表启动
mysqld_safe --skip-grant-tables --skip-networking &
# 免密进入
mysql -u root
第二步,按版本执行对应语句:
-- MySQL 8.0
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- MySQL 5.7
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- 若上句不可用,退回:
-- UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
-- MySQL 5.6 及更早
UPDATE mysql.user SET Password=PASSWORD('新密码') WHERE User='root';
FLUSH PRIVILEGES;
注意:
SET PASSWORD=PASSWORD('...')这种旧写法在 MySQL 5.7 已被标记废弃,在 8.0 中已彻底移除,网上大量老教程仍在使用,照抄会报语法错误。
第三步,退出并正常重启:
quit
# 结束临时进程
killall mysqld_safe mysqld 2>/dev/null
systemctl start mysqld # 或 systemctl start mysql
用新密码验证:mysql -u root -p。
如何封禁邮件端口,避免机房投诉?
服务器被滥用发送垃圾邮件,是收到机房 abuse 投诉最常见的原因之一,可能来自被入侵的程序,也可能是业务本身不需要却开着。如果你的业务完全不需要发邮件,直接封掉相关端口是最省心的做法。
涉及的端口:25(SMTP)、110(POP3)、465/587(加密 SMTP 提交)、993/995(加密 IMAP/POP3)。
iptables(传统方式):
iptables -A OUTPUT -p tcp -m multiport --dport 25,110,465,587,993,995 -j DROP
iptables -A OUTPUT -p udp -m multiport --dport 25,110,465,587,993,995 -j DROP
规则默认重启即失效,需要持久化:
# Debian / Ubuntu
apt install iptables-persistent -y && netfilter-persistent save
# CentOS 6 等旧系统
service iptables save
firewalld(CentOS 7+ / Rocky / Alma 默认):
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m multiport --dport 25,110,465,587,993,995 -j DROP
firewall-cmd --reload
只封
OUTPUT(出站)即可达到”禁止本机对外发信”的目的。原先流传的写法同时封了INPUT,那会连带影响本机接收邮件相关服务,如果服务器上跑着邮件服务需要留意。
服务器安全的整体配置建议参考服务器基础安全配置与 Linode VPS 初始安全配置。
相关教程
- 服务器基础安全配置——防火墙、用户权限、SSH 加固
- Linux 如何修改 root 密码
- Linux 打包与压缩:tar 和 zip
- MTR 网络检测工具——判断线路是否异常
- BBR 加速一键安装包——提升网络吞吐
- AMH 面板建站 / WDCP 面板建站