一、SSH 加密体系核心理论
(一)对称加密与非对称加密对比解析
1. 加密算法分类与应用场景
类型 | 代表算法 | 密钥数量 | 加密速度 | 安全性特点 | 典型用途 |
---|---|---|---|---|---|
对称加密 | AES、3DES | 1 个 | ★★★★☆ | 密钥传输风险高 | 会话数据加密 |
非对称加密 | RSA、ECC | 2 个 | ★★☆☆☆ | 公钥可公开,私钥需保密 | 身份认证、密钥交换 |
2. 对称加密的核心缺陷与解决方案
- 密钥传输风险:攻击者可能拦截对称密钥(如通过 ARP 欺骗)。
- SSH 解决方案:通过非对称加密(RSA/ECC)协商对称密钥,仅在首次连接时传输公钥。
3. 非对称加密的中间人攻击风险
- 攻击原理:
- 客户端请求连接服务器,攻击者拦截并发送自己的公钥。
- 客户端使用攻击者公钥加密密码,攻击者解密获取敏感信息。
-
防御措施:
- 首次连接时校验服务端公钥指纹(通过
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
获取)。 - 使用
ssh-keyscan
自动获取可信公钥并存入~/.ssh/known_hosts
。
- 首次连接时校验服务端公钥指纹(通过
(二)D-H 密钥交换协议深度解析
1. 协议工作流程
- 客户端与服务端各自生成随机数(a, b)和公开参数(g, p)。
- 双方交换公开参数,计算共享密钥(
K = g^(a*b) mod p
)。 - 最终通过共享密钥生成对称加密会话密钥。
2. 在 SSH 中的应用
- 作用:在不安全信道中安全协商对称加密密钥,避免密钥明文传输。
- 算法强度:SSH 默认使用
diffie-hellman-group14-sha1
,建议升级至diffie-hellman-group16-sha512
提升安全性。
二、SSH 认证机制与工作流程
(一)认证阶段详解
1. 基于口令的认证流程
2. 基于密钥的认证流程(无密码登录)
- 客户端生成密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 生成路径:~/.ssh/id_rsa(私钥)、~/.ssh/id_rsa.pub(公钥)
- 部署公钥到服务端:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100 # 自动将公钥追加到服务端~/.ssh/authorized_keys
- 认证交互流程:
- 服务端生成随机数 R,用客户端公钥加密后发送。
- 客户端用私钥解密得到 R,结合会话密钥生成摘要回传。
- 服务端比对摘要,一致则认证通过。
(二)配置文件核心参数解析
配置文件 | 作用描述 | 关键参数示例 |
---|---|---|
/etc/ssh/sshd_config | 服务端主配置文件 | Port 2222 PermitRootLogin no |
~/.ssh/authorized_keys | 服务端公钥存储文件 | ssh-rsa AAAAB3NzaC1y... user@client |
~/.ssh/known_hosts | 客户端可信服务端公钥存储文件 | 192.168.1.100 ssh-rsa AAAAB3NzaC1y... |
三、实战实验:SSH 安全配置与密钥登录
(一)实验 1:修改 SSH 服务端口
操作步骤:
- 编辑配置文件:
vim /etc/ssh/sshd_config # 找到Port字段,修改为非默认端口(如2222) Port 2222
- 关闭防火墙(测试环境):
systemctl stop firewalld && systemctl disable firewalld
- 临时关闭 SELinux(生产环境需配置策略):
setenforce 0 # 临时关闭 echo "SELINUX=permissive" > /etc/selinux/config # 永久生效(需重启)
- 重启服务:
systemctl restart sshd
- 验证连接:
ssh -p 2222 root@192.168.1.100
(二)实验 2:拒绝 root 用户远程登录
操作步骤:
- 配置禁止 root 登录:
vim /etc/ssh/sshd_config PermitRootLogin no # 将yes改为no
- 创建普通用户并授权:
useradd admin # 创建用户 echo "admin@123" | passwd --stdin admin # 设置密码 usermod -aG wheel admin # 赋予sudo权限
- 切换登录方式:
ssh admin@192.168.1.100 # 使用普通用户登录 sudo su - # 切换至root
(三)实验 3:允许特定用户登录
操作步骤:
- 配置允许用户列表:
vim /etc/ssh/sshd_config AllowUsers devops sysadmin # 允许devops和sysadmin用户登录 DenyUsers * # 禁止其他所有用户(需放在AllowUsers之后)
- 创建用户并测试:
useradd devops && useradd sysadmin # 创建用户 ssh devops@192.168.1.100 # 成功登录 ssh user@192.168.1.100 # 拒绝登录
(四)实验 4:密钥登录 root 用户(生产环境不推荐)
客户端操作:
- 生成 4096 位 RSA 密钥对:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_root # 生成独立密钥对,避免与普通用户混用
- 复制公钥到服务端:
ssh-copy-id -i ~/.ssh/id_rsa_root.pub root@192.168.1.100
服务端验证:
ls -al ~/.ssh/authorized_keys # 确认公钥已写入
ssh -i ~/.ssh/id_rsa_root root@192.168.1.100 # 无需密码登录
四、安全加固与最佳实践
(一)生产环境安全配置清单
加固项 | 配置方法 | 安全收益 |
---|---|---|
禁止 root 登录 | PermitRootLogin no | 降低暴力破解风险 |
限制登录端口 | Port 2222 | 隐藏默认端口,减少扫描暴露 |
启用公钥认证 | PubkeyAuthentication yes | 避免密码泄露 |
限制认证次数 | MaxAuthTries 3 | 防止暴力破解重试 |
定期更新公钥 | 定期轮换 authorized_keys 内容 | 应对公钥泄露事件 |
(二)故障排查指南
1. 连接被拒绝
- 可能原因:
- 端口未放行(
firewall-cmd --list-ports
检查)。 - SSH 服务未启动(
systemctl status sshd
检查)。
- 端口未放行(
- 解决方法:
firewall-cmd --permanent --add-port=2222/tcp systemctl start sshd
2. 公钥认证失败
- 可能原因:
- 公钥未正确部署(权限错误:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
)。 - 服务端配置禁用公钥认证(
PubkeyAuthentication no
)。
- 公钥未正确部署(权限错误:
- 解决方法
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server vim /etc/ssh/sshd_config && set PubkeyAuthentication yes
五、总结与扩展
通过本文的理论解析与实战操作,可全面掌握 SSH 的安全配置与认证机制,构建可靠的远程管理通道。在生产环境中,建议结合企业安全策略,定期进行渗透测试与配置审计,确保系统免受中间人攻击与暴力破解威胁。