logo 摸鱼论坛beta

Linux SSH 初始化 & 加固脚本使用指南

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]:
  • 输入 yY: 进入密码修改流程
  • 输入 nN 或直接回车: 跳过密码修改

密码要求:

  • 最少8位字符
  • 需要二次确认
  • 输入时不显示(安全考虑)

步骤3: SSH密钥登录配置

========================================
  SSH 密钥登录配置
========================================
是否启用SSH密钥登录? [Y/n]:

启用密钥登录后:

  1. 自动生成RSA 4096位密钥对
  2. 自动配置authorized_keys
  3. 密钥保存到 /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: 直接复制内容

脚本执行完成后会显示私钥和公钥的完整内容,可以直接复制保存到本地文件。


保存步骤:

  1. 复制私钥内容到本地文件 id_rsa
  2. 设置权限: chmod 600 id_rsa
  3. 复制公钥内容到本地文件 id_rsa.pub

🔐 连接到服务器

使用密钥连接

ssh -i /path/to/id_rsa -p <端口> root@<服务器IP>

Windows用户(使用PuTTY):

  1. 使用PuTTYgen转换私钥格式(id_rsa → .ppk)
  2. 在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等),需要在控制台安全组中开放新端口:


阿里云/腾讯云:

  1. 进入实例管理
  2. 配置安全组规则
  3. 添加入站规则:TCP,端口范围:<新SSH端口>,源:0.0.0.0/0

AWS:

  1. 进入EC2控制台
  2. 选择Security Groups
  3. 添加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) - 保留密码作为备用

📝 注意事项

  1. ⚠️ 必须使用root权限运行
  2. ⚠️ 运行前确保有备用连接方式(如云服务商控制台)
  3. ⚠️ 测试新配置后再断开当前连接
  4. ⚠️ 保存好私钥文件,丢失无法恢复
  5. ⚠️ 云服务器需要在安全组中开放新端口
  6. ⚠️ 禁用密码登录前确保密钥可用

📞 技术支持

如遇到问题,请检查:

  1. 系统日志: journalctl -xe
  2. SSH日志: tail -f /var/log/auth.log (Ubuntu) 或 /var/log/secure (CentOS)
  3. SSH配置测试: sshd -t
  4. 防火墙状态: firewall-cmd --list-allufw status

📜 许可证

MIT License - 自由使用和修改

🔄 更新日志

v1.0.0 (2024)

  • ✅ 初始版本发布
  • ✅ 支持Debian/Ubuntu/CentOS
  • ✅ SSH端口配置(随机/自定义)
  • ✅ Root密码修改
  • ✅ SSH密钥生成和配置
  • ✅ 自动防火墙配置
  • ✅ 安全加固配置
  • ✅ 配置备份和恢复

祝您使用愉快!🎉

测试签名。。

  • 蒸棒!:xhj001:

  • :ac01:我这种懒人都懒得改密码,都是改个随机端口

  • @eva #3
    下次可以使用这个脚本,全开源,安全可靠,已经在多个系统测试过了。

  • @crll #4
    :ac01:最近不折腾了,没钱当MJJ了

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈Statistics📈

注册会员: 106
主题: 60
回复: 267

🔗友情链接

所有版块