1. SSH免密登录:从“密码”到“钥匙”的思维跃迁
每次登录远程服务器都要敲一长串密码,不仅麻烦,还总担心输错。更关键的是,密码登录在自动化脚本、持续集成/持续部署(CI/CD)流程中几乎寸步难行。这就是SSH密钥认证要解决的核心痛点:用一对数学上关联的“钥匙”和“锁”替代传统的“口令”,实现安全、高效、自动化的身份验证。简单来说,你本地生成一把私钥(自己保管好,绝不外传)和一把公钥(可以随便给任何人),把公钥放到远程服务器上。下次登录时,服务器用你给的公钥出一道数学题,只有持有对应私钥的本地机器才能解出答案,从而证明“你就是你”。这个过程完全无需手动输入密码,安全性反而比普通密码更高,因为私钥通常有更长的位数且难以暴力破解。
这套机制是Linux/Unix系统运维、开发部署的基石。无论是用VSCode远程连接服务器写代码,还是用Git进行代码推送拉取,抑或是通过Ansible等工具进行批量服务器管理,背后都依赖SSH密钥认证的顺畅运行。我见过太多新手卡在配置环节,或者配置后依然登录失败,问题往往出在文件权限、密钥类型选择或服务配置这些细节上。接下来,我就带你用5分钟完成核心配置,再用更长时间把背后的原理和可能遇到的“坑”讲透,让你不仅会配,更懂为什么这么配。
2. 密钥对生成:选对算法与妥善保管
配置的第一步是在你的本地机器(客户端)生成密钥对。这里有几个关键选择,直接影响到兼容性和安全性。
2.1 算法选择:RSA vs Ed25519
打开终端,你会用到 ssh-keygen 这个命令。现在最常见的困扰是:该用哪种算法?
# 传统且兼容性最好的RSA算法,默认2048位
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
# 更现代、更安全、更快的Ed25519算法
ssh-keygen -t ed25519 -C "your_email@example.com"
如何选择?
- 选RSA(-t rsa)的情况 :你需要连接一些老旧系统或网络设备(如某些老版本OpenSSH服务端、旧款路由器、交换机)。2048位是当前的安全底线,4096位更安全但生成和验证稍慢。
-C后面的注释只是标识,方便你管理多个密钥,不会影响功能。 - 选Ed25519(-t ed25519)的情况 :这是当前的首选。它比同等安全强度的RSA密钥更短,生成更快,且被认为更能抵抗某些类型的密码学攻击。绝大多数现代Linux发行版(Ubuntu 20.04+、CentOS 8+)和云服务商都已支持。
注意 :虽然GitHub等平台推荐使用Ed25519,但如果你公司内网还有RHEL 7这类老系统,可能默认不支持,这时就得用RSA。一个简单的判断方法是,如果你不确定远程服务器的情况,先用RSA 2048,这是最通用的。
执行命令后,它会询问你密钥的保存路径和口令(passphrase)。
- 保存路径 :直接回车会默认保存在
~/.ssh/id_rsa(RSA)或~/.ssh/id_ed25519(Ed25519)。建议使用默认路径,因为大多数SSH客户端会默认读取这些位置。 - 口令 :这是一个可选的、对私钥本身进行加密的密码。即使别人偷了你的私钥文件,没有口令也无法使用。对于个人电脑,如果你能保证物理安全,可以不设(直接回车)。用于生产环境或笔记本电脑,强烈建议设置一个强口令,并配合
ssh-agent管理,这样只需一次输入就能在多个连接中使用。
2.2 密钥文件解读与权限管理
生成成功后,在 ~/.ssh/ 目录下你会看到两个文件(以RSA为例):
-
id_rsa: 私钥文件 。这是你必须像保护密码一样保护的文件。权限必须设置为 600 (仅所有者可读写)。如果权限不对,SSH客户端会出于安全考虑拒绝使用它。 -
id_rsa.pub: 公钥文件 。这个文件的内容就是你要上传到服务器上的“锁”。它的权限可以宽松一些,但通常也设为 644 。
检查并设置权限的命令:
# 检查当前权限
ls -l ~/.ssh/id_rsa*
# 如果权限不对,进行修正(私钥600,公钥644)
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
这


367

被折叠的 条评论
为什么被折叠?



