一、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 认证机制与工作流程
(一)认证阶段详解
- 基于口令的认证流程

2. 基于密钥的认证流程(无密码登录)
-
客户端生成密钥对 :
ssh-keygen -t rsa -b 4096 -C "[email protected]" # 生成路径:~/.ssh/id_rsa(私钥)、~/.ssh/id_rsa.pub(公钥)
-
部署公钥到服务端 :
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] # 自动将公钥追加到服务端~/.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 [email protected]
(二)实验 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 [email protected] # 使用普通用户登录 sudo su - # 切换至root
(三)实验 3:允许特定用户登录
操作步骤:
-
配置允许用户列表 :
vim /etc/ssh/sshd_config AllowUsers devops sysadmin # 允许devops和sysadmin用户登录 DenyUsers * # 禁止其他所有用户(需放在AllowUsers之后)
-
创建用户并测试 :
useradd devops && useradd sysadmin # 创建用户 ssh [email protected] # 成功登录 ssh [email protected] # 拒绝登录
(四)实验 4:密钥登录 root 用户(生产环境不推荐)
客户端操作:
-
生成 4096 位 RSA 密钥对 :
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_root # 生成独立密钥对,避免与普通用户混用
-
复制公钥到服务端 :
ssh-copy-id -i ~/.ssh/id_rsa_root.pub [email protected]
服务端验证:
ls -al ~/.ssh/authorized_keys # 确认公钥已写入
ssh -i ~/.ssh/id_rsa_root [email protected] # 无需密码登录
四、安全加固与最佳实践
(一)生产环境安全配置清单
加固项 | 配置方法 | 安全收益 |
---|---|---|
禁止 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 的安全配置与认证机制,构建可靠的远程管理通道。在生产环境中,建议结合企业安全策略,定期进行渗透测试与配置审计,确保系统免受中间人攻击与暴力破解威胁。