当前位置: 首页 > news >正文

从零配置SSH安全与连接:详解PasswordAuthentication、PermitRootLogin与ClientAlive策略

1. SSH安全配置入门:从零开始保护你的服务器

第一次接触SSH服务器配置时,很多人都会感到无从下手。作为系统管理员最常用的远程管理工具,SSH的安全性直接关系到服务器的生死存亡。我见过太多因为SSH配置不当导致服务器被入侵的案例,有些甚至只是因为保留了默认密码认证就酿成大祸。

SSH的配置文件/etc/ssh/sshd_config就像是一把双刃剑,配置得当可以成为坚固的堡垒,配置失误则可能变成入侵者的后门。这个文件控制着SSH服务的各种行为,从认证方式到连接设置,每个参数都值得仔细斟酌。不过别担心,今天我们就从三个最关键的参数入手:PasswordAuthentication(密码认证)、PermitRootLogin(root登录)和ClientAlive(连接保持),带你一步步构建安全的SSH环境。

2. 密码认证:关闭这个选项能让你的服务器更安全

2.1 PasswordAuthentication的隐患与替代方案

PasswordAuthentication参数控制是否允许使用密码进行SSH登录,默认值为"yes"。这听起来很方便,但却是最大的安全隐患之一。我去年处理过一个服务器被黑的案例,攻击者就是通过暴力破解弱密码获得了访问权限。

密码认证的问题在于:

  • 容易被暴力破解,特别是使用简单密码时
  • 无法实现双因素认证
  • 每次登录都需要手动输入,自动化管理不便

更安全的做法是使用密钥认证。生成密钥对只需要一行命令:

ssh-keygen -t ed25519 -C "your_email@example.com"

然后将公钥上传到服务器:

ssh-copy-id user@your_server_ip

最后,在/etc/ssh/sshd_config.d/目录下创建新配置文件:

echo 'PasswordAuthentication no' | sudo tee /etc/ssh/sshd_config.d/no_password.conf sudo systemctl restart sshd

2.2 密钥认证的最佳实践

使用密钥认证时,有几点需要注意:

  1. 私钥必须设置强密码
  2. 建议使用ED25519算法而非RSA
  3. 定期轮换密钥
  4. 使用ssh-agent管理密钥

我曾经遇到过开发者将私钥上传到GitHub的案例,这相当于把家门钥匙放在公共场所。正确的做法是将私钥保存在本地,并设置600权限:

chmod 600 ~/.ssh/id_ed25519

3. Root登录:为什么你应该禁止直接root访问

3.1 PermitRootLogin的四种模式详解

PermitRootLogin参数控制root用户能否通过SSH登录,它有四个可选值:

参数值说明安全等级
yes允许root登录,可以使用任何认证方式
prohibit-password禁止密码认证,但允许密钥认证
forced-commands-only仅允许执行预定义命令中高
no完全禁止root登录

默认值是"prohibit-password",这已经比老版本进步很多了。但我建议在生产环境设置为"no",因为:

  • root权限太大,一旦泄露后果严重
  • 通过普通用户+sudo的方式更安全
  • 可以更好地审计操作记录

3.2 安全使用root权限的方案

完全禁止root登录后,可以通过以下方式安全地获取root权限:

  1. 先用普通用户登录
  2. 使用sudo执行特权命令
  3. 或者通过sudo -i切换为root

配置方法:

echo 'PermitRootLogin no' | sudo tee /etc/ssh/sshd_config.d/no_root_login.conf sudo systemctl restart sshd

记得先创建一个具有sudo权限的普通用户,否则你可能把自己锁在服务器外面:

adduser yourusername usermod -aG sudo yourusername

4. 连接保持:告别烦人的SSH超时断开

4.1 ClientAliveInterval与ClientAliveCountMax的配合使用

SSH连接无故断开是很多人的噩梦,特别是在执行长时间任务时。这通常是因为网络设备清除了"不活跃"的TCP连接。通过配置ClientAliveIntervalClientAliveCountMax可以解决这个问题。

  • ClientAliveInterval:服务器检测客户端是否存活的时间间隔(秒)
  • ClientAliveCountMax:允许的最大未响应次数

计算方式很简单:超时时间 = Interval × CountMax

例如,设置:

echo 'ClientAliveInterval 60 ClientAliveCountMax 3' | sudo tee /etc/ssh/sshd_config.d/keepalive.conf sudo systemctl restart sshd

这意味着服务器每60秒会检测一次客户端,如果连续3次(即180秒)没有响应,才会断开连接。

4.2 不同场景下的推荐配置

根据使用场景,我有这些建议:

  1. 本地网络:Interval=30, CountMax=3(90秒超时)
  2. 远程办公:Interval=60, CountMax=10(10分钟超时)
  3. 跳板机:Interval=120, CountMax=30(1小时超时)

注意不要设置过长的超时时间,特别是在公共网络上,这可能会增加会话劫持的风险。

5. 配置管理:如何安全地修改SSH设置

5.1 使用sshd_config.d目录的最佳实践

直接修改/etc/ssh/sshd_config文件不是个好主意,原因有三:

  1. 升级时可能被覆盖
  2. 难以追踪变更历史
  3. 容易引入语法错误影响整个服务

更好的做法是利用/etc/ssh/sshd_config.d/目录,这里的.conf文件会被主配置自动包含。例如:

sudo mkdir -p /etc/ssh/sshd_config.d echo 'PasswordAuthentication no PermitRootLogin no ClientAliveInterval 60 ClientAliveCountMax 3' | sudo tee /etc/ssh/sshd_config.d/my_settings.conf sudo chmod 644 /etc/ssh/sshd_config.d/my_settings.conf sudo systemctl restart sshd

5.2 配置检查与故障排除

修改配置后,务必检查语法是否正确:

sudo sshd -t

如果返回空,说明配置正确;如果有错误,它会明确指出问题所在。另外,在重启sshd服务前,建议保持至少一个活跃的SSH会话,以防配置错误导致无法连接。

查看当前生效的配置可以使用:

sudo sshd -T | grep -E 'PasswordAuthentication|PermitRootLogin|ClientAlive'

6. 安全加固:超越基础配置的额外措施

6.1 更改默认SSH端口

SSH默认使用22端口,这使它成为自动化攻击的主要目标。修改端口能显著减少恶意扫描:

echo 'Port 2222' | sudo tee /etc/ssh/sshd_config.d/change_port.conf

记得更新防火墙规则,并确保新端口没有被占用。我一般选择1024-49151之间的随机端口。

6.2 使用Fail2Ban防止暴力破解

Fail2Ban可以自动封锁多次尝试失败的IP:

sudo apt install fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

然后在/etc/fail2ban/jail.local中配置:

[sshd] enabled = true port = 2222 maxretry = 3 bantime = 1h

6.3 限制用户和IP访问

只允许特定用户通过SSH登录:

echo 'AllowUsers yourusername' | sudo tee /etc/ssh/sshd_config.d/allow_users.conf

或者只允许特定IP段访问:

echo 'AllowClients 192.168.1.0/24' | sudo tee /etc/ssh/sshd_config.d/allow_ips.conf

重启服务后,这些限制就会生效。在企业环境中,我通常会结合LDAP或SSO来实现更精细的访问控制。

http://www.jsqmd.com/news/808616/

相关文章:

  • 2026年西安施工总承包资质新办哪家好?全面对比与推荐 - COINUP
  • 保姆级教程:CM311-1A盒子刷Armbian后,第一次开机必做的5项配置(含中文设置)
  • 2026煅烧炉十大厂家盘点|定制能力、售后口碑、技术实力全梳理——成都美卓美方化工科技实力解析 - 品牌推荐大师1
  • 终极Windows更新修复指南:5步使用Reset Windows Update Tool解决更新问题
  • 告别懵圈!手把手教你用CANoe实操UDS诊断中的ECU Reset(0x11服务)
  • 分段线性化(PWL)建模实战:从理论到Python+Gurobi代码解析
  • CC编程看到的不是少儿编程风口,而是普通家庭的科创教育需求 - 速递信息
  • 2026年5月南阳租车公司最新推荐:大巴、中巴、商务车租赁优选指南 - 海棠依旧大
  • 找口碑好的板面加盟连锁品牌 - 中媒介
  • AI写的小说,且行且看...
  • 空气循环炉哪家的机器耐用?盘点信誉好、质量过硬的国产实力派品牌 - 品牌推荐大师1
  • 2026年南宁汽车音响改装与隔音降噪服务参考指南 - 海棠依旧大
  • 2026年泉州自建房大门公司最新推荐榜:静音舱/金属门/入户门/别墅大门/泉州铝艺大门 - 品牌策略师
  • 简单说意识
  • Anonymous Github部署完全教程:从零到生产环境的完整指南
  • 适合返乡创业的板面加盟品牌 - 中媒介
  • 2026年南阳汽车租赁靠谱服务商参考:南阳市洪安汽车租赁中心,南阳租车、南阳大巴出租、南阳商务车出租、南阳自驾租车,以本土服务适配全域出行需求 - 海棠依旧大
  • Aurae虚拟机和容器管理:从零到生产部署的完整流程
  • 2026合肥手表回收哪里正规?收的顶现场估价当面结算 - 奢侈品回收测评
  • C语言_通讯录
  • 馕品牌哪家历史久? - 中媒介
  • 避开自动控制里的坑:开环零极点加错了,系统性能反而变差?
  • CVD气相沉积-上海添时科学仪器有限公司 - 品牌推荐大师1
  • 别再只用一个子网了!AWS VPC实战:手把手教你搭建跨可用区的高可用Web服务架构
  • 2026年谷歌搜索SEO优化需要做什么?解决零点击流失的3个小技巧
  • 2026年5月广州律师事务所推荐:在行业分水岭上寻找专业的“法律压舱石” - 深度智识库
  • 2026不锈钢焊管厂家直销最新推荐榜单:综合实力测评,高性价比靠谱品牌推荐 - 品牌企业推荐师(官方)
  • 盐城赛事活动周边哪家定制快? - 中媒介
  • Web安全:TLS/SSL证书详解
  • 30+法考碎片时间刷题用什么APP?揽星法考APP碎片化刷题 - 速递信息