SSH 是我们管理服务器的“大门”。默认情况下,这扇门开在 22 号端口,并且使用密码锁。这意味着互联网上任何一个人都知道去哪里敲门,并且可以尝试无数把钥匙(暴力破解)。
本教程将带你完成一次完整的 SSH 升级改造:换个隐蔽的门(改端口) -> 换把指纹锁(密钥登录) -> 门口安个自动炮塔(Fail2Ban) -> 给自己配个万能遥控器(SSH Config)。
📋 目录
- 现状诊断:查看当前 SSH 端口
- 隐身术:安全修改 SSH 端口
- 铁桶阵:配置密钥登录并禁用密码
- 主动防御:安装 Fail2Ban 防止暴力破解
- 极致效率:配置本地 SSH Config 秒连服务器
1. 现状诊断:查看当前 SSH 端口
在动刀之前,先确认现在的 SSH 跑在哪个端口上。
方法 A:查看正在监听的进程(最准确)
这能反映服务当前实际运行的状态:
sudo ss -tulpn | grep ssh
查看输出中 0.0.0.0:22 冒号后面的数字,即为当前端口。
方法 B:查看配置文件
grep -i "Port" /etc/ssh/sshd_config
如果显示 #Port 22,说明使用的是默认端口 22。
2. 隐身术:安全修改 SSH 端口
修改默认端口可以避开绝大多数针对 22 端口的无脑扫描脚本。
⚠️ 警告:在确认新端口能连接之前,千万不要关闭当前的终端窗口!否则一旦配置错误,你会被锁在服务器外面。
步骤 2.1:备份并修改配置
# 备份原配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑配置
sudo nano /etc/ssh/sshd_config
找到 #Port 22,去掉 # 号,并将 22 改为一个不常用的端口(例如 2222 或 10086):Port 2222
保存退出:Ctrl+O -> Enter -> Ctrl+X。
步骤 2.2:放行防火墙 (UFW) —— 最关键的一步
如果开启了防火墙却忘了这一步,重启服务后你就进不去了。
sudo ufw allow 2222/tcp
步骤 2.3:重启服务并验证
sudo systemctl restart ssh
验证方法:保持当前窗口不动,新开一个终端窗口尝试连接:
ssh -p 2222 用户名@服务器IP
如果连接成功,恭喜你,修改完成!你可以选择删除旧的 22 端口规则:sudo ufw delete allow 22/tcp。
3. 铁桶阵:配置密钥登录并禁用密码
密码可能被猜到,但密钥文件很难被偷走。这是提升安全性的质变一步。
步骤 3.1:在本地电脑生成密钥
在你的电脑(不是服务器)上运行:
ssh-keygen -t rsa -b 4096
一路回车即可。这会在 ~/.ssh/ 下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)。
步骤 3.2:将公钥上传到服务器
在你的电脑上运行:
# 注意:如果刚才改了端口,这里要加 -p
ssh-copy-id -p 2222 用户名@服务器IP
步骤 3.3:验证密钥登录
尝试登录,确认是否还需要输入密码:
ssh -p 2222 用户名@服务器IP
如果直接进去了,说明密钥配置成功。
步骤 3.4:禁用密码登录
既然有了钥匙,就封死密码登录的缺口。回到服务器编辑配置:
sudo nano /etc/ssh/sshd_config
修改以下项:
PubkeyAuthentication yes
PasswordAuthentication no
重启 SSH 服务:sudo systemctl restart ssh。
现在,没有密钥的人,连输入密码的机会都没有了。
4. 主动防御:安装 Fail2Ban
即使改了端口,执着的黑客可能还是会扫到你。Fail2Ban 可以监控日志,自动拉黑那些不断试错的 IP。
步骤 4.1:安装
sudo apt update
sudo apt install fail2ban
步骤 4.2:配置
复制一份配置文件副本:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 [sshd] 部分,确保修改端口为你的新端口:
[sshd]
enabled = true
port = 2222 <-- 这里一定要改成你的新端口!
bantime = 3600 # 封禁 1 小时
maxretry = 3 # 试错 3 次就封
步骤 4.3:启动
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
查看被封禁的 IP 列表(战果统计):sudo fail2ban-client status sshd
5. 极致效率:配置本地 SSH Config
每次都要输入 ssh -p 2222 user@192.168.1.1 太麻烦了?我们可以给服务器起个别名。
在你的电脑上,编辑 ~/.ssh/config 文件:
Host myvps
HostName 192.168.1.100 # 服务器 IP
User root # 用户名
Port 2222 # 端口
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 60 # 防止发呆自动断线
效果:
以后只需要输入 ssh myvps 即可秒连服务器!
甚至传输文件也变简单了:scp file.txt myvps:/tmp。
总结
经过这一番操作,你的服务器现在的状态是:
- 端口隐蔽:不在默认的 22 端口。
- 拒绝暴力:只能凭密钥进入,密码尝试直接被拒。
- 自动反击:谁敢恶意扫描,Fail2Ban 直接封 IP。
- 操作丝滑:一句
ssh myvps即可连接。
安全与效率并存,这才是 Linux 运维的正确姿势!🚀
版权属于:soarli
本文链接:https://blog.soarli.top/archives/790.html
转载时须注明出处及本声明。