摘要:密码认证存在被暴力破解的风险,而SSH密钥认证基于非对称加密,安全性极高。本文将深入讲解对称加密与非对称加密的原理、算法及对比,并使用MobaXterm生成RSA密钥对,将公钥上传至Linux服务器,配置SSH仅允许密钥登录,彻底关闭密码通道。适合所有Linux运维人员和开发者。
一、实验环境
| 设备 | 操作系统 | 说明 |
|---|---|---|
| 客户端 | Windows(安装MobaXterm) | 用于生成密钥对,远程连接 |
| 服务器 | Kali Linux 2026.1 | 作为SSH服务端,配置密钥认证 |
此处客户端也可使用Kali自身,但为演示常用工具,使用MobaXterm。
二、加密基础:对称加密与非对称加密
在深入SSH密钥认证前,必须理解两种基本加密方式。
2.1 对称加密(Symmetric Encryption)
原理:加密和解密使用同一个密钥。发送方用密钥加密数据,接收方用相同的密钥解密。
特点:
加解密速度极快,适合大量数据。
密钥管理困难:每对通信方需要共享一个密钥,n个人需要
n(n-1)/2个密钥。密钥传输过程中容易被截获。
常见算法:DES(已过时)、3DES、AES(最常用)、SM4(国密)。
密钥长度:通常128位、192位、256位(AES)。
应用场景:文件加密、数据库加密、SSL/TLS中的批量数据传输(会话密钥)。
2.2 非对称加密(Asymmetric Encryption)
原理:使用一对密钥——公钥(public key)和私钥(private key)。公钥加密的数据只能用私钥解密;私钥加密的数据只能用公钥解密(数字签名)。
特点:
安全性极高,无需共享密钥。
加解密速度慢,比对称加密慢几个数量级。
公钥可公开,私钥必须保密。
常见算法:RSA、DSA(数字签名)、ECC(椭圆曲线)、SM2(国密)。
密钥长度:RSA常用1024、2048、4096位。
应用场景:
加密:用对方公钥加密消息,确保只有对方私钥能读。
身份认证/数字签名:用私钥签名,对方用公钥验证。
SSH密钥认证:客户端用私钥证明身份,服务器用公钥验证。
2.3 对比总结
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 | 2(公钥+私钥) |
| 密钥分发 | 困难(需安全通道) | 简单(公钥可公开) |
| 速度 | 快 | 慢(约100倍差距) |
| 安全性 | 取决于密钥长度和算法 | 更高 |
| 典型算法 | AES | RSA、ECC |
| SSH中的角色 | 会话加密(实际传输数据) | 身份认证 + 交换会话密钥 |
SSH协议结合了两者:初期用非对称加密完成身份认证和会话密钥交换,之后用对称加密(如AES)加密所有通信内容。
三、SSH密钥认证工作原理
客户端生成密钥对(ssh-keygen):私钥保存在本地,公钥上传至服务器~/.ssh/authorized_keys。
客户端发起连接:服务器发送一个随机字符串。
客户端用私钥签名:将签名结果返回服务器。
服务器用公钥验签:若通过,允许登录。
整个过程不传输密码,即使网络被监听,也无法获得私钥。
四、实战:配置SSH密钥认证
步骤1:在客户端生成密钥对(使用MobaXterm)
打开MobaXterm本地终端,执行:
ssh-keygen -t rsa -b 2048提示保存路径:默认
/home/mobaxterm/.ssh/id_rsa(回车)提示输入密码短语:可留空(直接回车,方便自动化)
再次确认:回车
生成后,私钥:id_rsa,公钥:id_rsa.pub。
步骤2:将公钥拷贝到服务器
在MobaXterm终端中执行:
ssh-copy-id root@10.0.0.129输入root密码(当前服务器允许密码登录),公钥会自动追加到服务器的/root/.ssh/authorized_keys文件中。
问题解决:
若kali的root用户不支持ssh连接登录,执行以下内容可解决
sudo sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config sudo systemctl restart ssh步骤3:验证公钥上传成功
在Kali服务器上查看:
ls /root/.ssh/ cat /root/.ssh/authorized_keys步骤4:测试密钥登录
在MobaXterm中直接连接:
ssh root@10.0.0.129此时无需输入密码,直接登录成功。
步骤5:禁用密码登录(最终加固)
在Kali服务器上编辑/etc/ssh/sshd_config:
vim /etc/ssh/sshd_config找到#PasswordAuthentication yes,改为:
PasswordAuthentication no重启SSH服务:
systemctl restart ssh验证:再次尝试用密码登录,会被拒绝;只有持有私钥的客户端才能登录。
五、总结
本文首先系统阐述了对称加密与非对称加密的原理、算法、特点及应用场景,明确了两者在SSH协议中的协同作用:非对称加密用于身份认证和会话密钥交换,对称加密用于实际数据传输。随后,在Windows客户端(MobaXterm)与Kali Linux服务器环境中,详细演示了SSH密钥认证的完整配置流程:使用ssh-keygen生成RSA密钥对,通过ssh-copy-id上传公钥,测试免密登录,最后修改SSH配置文件禁用密码登录。实验结果表明,密钥认证彻底消除了密码暴力破解的风险,同时提升了登录便捷性。运维人员应优先采用密钥认证,并定期审核authorized_keys文件,移除失效或未授权的公钥。对于高安全环境,建议为私钥设置强密码短语,并启用SSH代理转发限制。
重要声明:本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。
如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。