Linux SSH 初始化 & 加固脚本使用指南
📋 功能特性
✅
全平台兼容
- Debian / Ubuntu
- CentOS / RHEL / Rocky Linux / AlmaLinux
- 自动检测系统类型和包管理器
✅
SSH端口配置
- 随机生成端口(10000-65535)
- 自定义端口
- 保持默认端口22
- 自动检测端口占用
✅
密码管理
- 安全修改root密码
- 密码强度验证(最少8位)
- 二次确认防止输入错误
✅
SSH密钥登录
- 自动生成RSA 4096位密钥对
- 自动配置authorized_keys
- 显示密钥内容供复制
- 提供密钥文件下载路径
- 可选禁用密码登录
✅
防火墙自动配置
- 自动检测防火墙类型(FirewallD / UFW / iptables)
- 自动添加新SSH端口规则
✅
安全加固
- 禁用空密码登录
- 限制最大认证尝试次数
- 配置客户端存活检测
- 禁用X11转发
- 自动备份原配置文件
🚀 快速开始
1. 下载脚本
方式1: 直接下载(一键执行)
wget https://meimiao.de/sh/linux_ssh_init.sh && chmod +x linux_ssh_init.sh && ./linux_ssh_init.sh
方式2: 使用curl(一键执行)
curl -O https://meimiao.de/sh/linux_ssh_init.sh && chmod +x linux_ssh_init.sh && ./linux_ssh_init.sh
方式3: 分步执行
wget https://meimiao.de/sh/linux_ssh_init.sh
chmod +x linux_ssh_init.sh
./linux_ssh_init.sh
方式4: 手动上传
将脚本上传到服务器任意目录
2. 赋予执行权限
chmod +x linux_ssh_init.sh
3. 运行脚本
sudo ./linux_ssh_init.sh
📖 使用流程
步骤1: SSH端口配置
脚本会提示选择SSH端口配置方式:
========================================
SSH 端口配置
========================================
1) 使用随机端口
2) 自定义端口
3) 保持默认端口 (22)
请选择 [1-3]:
选项说明:
- 选项1: 自动生成10000-65535之间的随机端口
- 选项2: 手动输入端口号(1024-65535)
- 选项3: 保持使用默认的22端口
步骤2: 修改Root密码
========================================
修改 Root 密码
========================================
是否修改root密码? [y/N]:
- 输入
y 或 Y: 进入密码修改流程
- 输入
n 或 N 或直接回车: 跳过密码修改
密码要求:
- 最少8位字符
- 需要二次确认
- 输入时不显示(安全考虑)
步骤3: SSH密钥登录配置
========================================
SSH 密钥登录配置
========================================
是否启用SSH密钥登录? [Y/n]:
启用密钥登录后:
- 自动生成RSA 4096位密钥对
- 自动配置authorized_keys
- 密钥保存到
/tmp/ssh_keys_YYYYMMDD_HHMMSS/
是否禁用密码登录:
是否禁用密码登录(仅允许密钥登录)? [y/N]:
⚠️
警告: 选择禁用密码登录后,只能通过密钥连接,请务必保存好私钥!
📥 下载密钥文件
方法1: 使用SCP下载(推荐)
# 从本地电脑执行
scp -P <SSH端口> root@<服务器IP>:/tmp/ssh_keys_*/id_rsa ~/Downloads/
scp -P <SSH端口> root@<服务器IP>:/tmp/ssh_keys_*/id_rsa.pub ~/Downloads/
方法2: 使用SFTP下载
sftp -P <SSH端口> root@<服务器IP>
get /tmp/ssh_keys_*/id_rsa
get /tmp/ssh_keys_*/id_rsa.pub
exit
方法3: 直接复制内容
脚本执行完成后会显示私钥和公钥的完整内容,可以直接复制保存到本地文件。
保存步骤:
- 复制私钥内容到本地文件
id_rsa
- 设置权限:
chmod 600 id_rsa
- 复制公钥内容到本地文件
id_rsa.pub
🔐 连接到服务器
使用密钥连接
ssh -i /path/to/id_rsa -p <端口> root@<服务器IP>
Windows用户(使用PuTTY):
- 使用PuTTYgen转换私钥格式(id_rsa → .ppk)
- 在PuTTY中配置:
- Host: 服务器IP
- Port: 新SSH端口
- Connection → SSH → Auth → Private key file: 选择.ppk文件
使用密码连接
ssh -p <端口> root@<服务器IP>
🛡️ 安全建议
1. 测试新配置
⚠️
重要: 在断开当前SSH连接前,务必先测试新配置!
# 保持当前SSH会话不关闭
# 新开一个终端窗口测试连接
ssh -p <新端口> root@<服务器IP>
2. 防火墙配置
如果使用云服务器(阿里云、腾讯云、AWS等),需要在控制台安全组中开放新端口:
阿里云/腾讯云:
- 进入实例管理
- 配置安全组规则
- 添加入站规则:TCP,端口范围:<新SSH端口>,源:0.0.0.0/0
AWS:
- 进入EC2控制台
- 选择Security Groups
- 添加Inbound Rule:SSH,TCP,<新SSH端口>,0.0.0.0/0
3. 密钥管理
✅
最佳实践:
- 立即下载私钥到本地
- 设置私钥文件权限为600
- 备份私钥到安全位置
- 下载后删除服务器上的密钥文件
# 下载密钥后,在服务器上执行
rm -rf /tmp/ssh_keys_*
4. 配置备份
脚本会自动备份原SSH配置到:
/etc/ssh/sshd_config.backup.YYYYMMDD_HHMMSS
如需恢复:
cp /etc/ssh/sshd_config.backup.* /etc/ssh/sshd_config
systemctl restart sshd # CentOS
systemctl restart ssh # Ubuntu/Debian
🔧 故障排除
问题1: 无法连接到新端口
检查防火墙:
# FirewallD (CentOS)
firewall-cmd --list-ports
firewall-cmd --permanent --add-port=<端口>/tcp
firewall-cmd --reload
# UFW (Ubuntu)
ufw status
ufw allow <端口>/tcp
# iptables
iptables -L -n | grep <端口>
问题2: 密钥登录失败
检查权限:
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chmod 600 /path/to/id_rsa # 本地私钥
检查SSH配置:
grep "PubkeyAuthentication" /etc/ssh/sshd_config
# 应该显示: PubkeyAuthentication yes
问题3: SSH服务无法启动
查看错误日志:
# CentOS
journalctl -u sshd -n 50
# Ubuntu/Debian
journalctl -u ssh -n 50
测试配置文件:
sshd -t
问题4: 被锁在服务器外
使用云服务商控制台:
- 阿里云: VNC连接
- 腾讯云: VNC登录
- AWS: EC2 Instance Connect
恢复配置:
cp /etc/ssh/sshd_config.backup.* /etc/ssh/sshd_config
systemctl restart sshd
📊 配置说明
脚本会应用以下安全配置:
| 配置项 | 值 | 说明 |
|---|
| Port | 自定义/随机 | SSH监听端口 |
| PasswordAuthentication | yes/no | 是否允许密码登录 |
| PubkeyAuthentication | yes | 允许密钥登录 |
| PermitRootLogin | yes/prohibit-password | Root登录方式 |
| PermitEmptyPasswords | no | 禁止空密码 |
| MaxAuthTries | 3 | 最大认证尝试次数 |
| ClientAliveInterval | 300 | 客户端存活检测间隔(秒) |
| ClientAliveCountMax | 2 | 最大存活检测次数 |
| X11Forwarding | no | 禁用X11转发 |
🎯 使用场景
场景1: 新服务器初始化
# 1. 运行脚本
./linux_ssh_init.sh
# 2. 选择随机端口
# 3. 修改root密码
# 4. 启用密钥登录
# 5. 禁用密码登录
# 6. 下载密钥
# 7. 测试连接
场景2: 仅修改SSH端口
# 1. 运行脚本
./linux_ssh_init.sh
# 2. 选择自定义端口
# 3. 跳过密码修改 (输入n)
# 4. 跳过密钥配置 (输入n)
场景3: 添加密钥登录
# 1. 运行脚本
./linux_ssh_init.sh
# 2. 保持默认端口 (选择3)
# 3. 跳过密码修改 (输入n)
# 4. 启用密钥登录 (输入y)
# 5. 不禁用密码登录 (输入n) - 保留密码作为备用
📝 注意事项
- ⚠️ 必须使用root权限运行
- ⚠️ 运行前确保有备用连接方式(如云服务商控制台)
- ⚠️ 测试新配置后再断开当前连接
- ⚠️ 保存好私钥文件,丢失无法恢复
- ⚠️ 云服务器需要在安全组中开放新端口
- ⚠️ 禁用密码登录前确保密钥可用
📞 技术支持
如遇到问题,请检查:
- 系统日志:
journalctl -xe
- SSH日志:
tail -f /var/log/auth.log (Ubuntu) 或 /var/log/secure (CentOS)
- SSH配置测试:
sshd -t
- 防火墙状态:
firewall-cmd --list-all 或 ufw status
📜 许可证
MIT License - 自由使用和修改
🔄 更新日志
v1.0.0 (2024)
- ✅ 初始版本发布
- ✅ 支持Debian/Ubuntu/CentOS
- ✅ SSH端口配置(随机/自定义)
- ✅ Root密码修改
- ✅ SSH密钥生成和配置
- ✅ 自动防火墙配置
- ✅ 安全加固配置
- ✅ 配置备份和恢复
祝您使用愉快!🎉