SSH 密钥详解:生成、认证、密钥对信息及更多内容
SSH 密钥不仅可以提升安全性,还能实现互联流程自动化、单点登录(SSO),以及满足当今企业所需的大规模身份与访问管理需求。
什么是 SSH 密钥?
更新于:2025 年 6 月 19 日
SSH 密钥是 Secure Shell(SSH)协议中使用的安全访问凭证。SSH 密钥对采用公钥基础设施(PKI)技术——这一数字身份认证与加密领域的黄金标准技术,来提供安全且可扩展的认证方式。
由于 SSH 协议被广泛用于云服务、网络环境、文件传输工具、配置管理工具及其他依赖计算机的服务中的通信,大多数组织使用这类基于密钥的认证方式验证身份,保护上述服务免遭不当使用或恶意攻击.
密钥对——公钥与私钥
SSH 密钥依赖两个相关但非对称的密钥:公钥和私钥,二者共同组成密钥对,作为安全访问凭证使用。私钥是保密的,仅用户本人知晓,应当加密并妥善存储。公钥可以自由分享给用户想要连接的任意 SSH 服务器。这类密钥通常由组织的 IT 团队管理,更佳的做法是借助受信任的证书颁发机构(CA)协助,确保密钥得到安全存储。
创建数字身份时,公钥和私钥会同步生成,密钥对通过高强度的公钥密码学 算法建立关联。密钥生成最常用的数学算法包括Rivest–Shamir–Adleman(RSA,即RSA算法)与椭圆曲线数字签名算法(ECDSA),它是 DSA 的椭圆曲线应用实现。
这些算法通过多种计算方式生成不同长度的随机数字组合,以抵御暴力破解攻击。密钥大小(即位长)是决定防护强度的重要指标。2048位RSA密钥或521位ECDSA密钥可提供足够的密码强度,防止黑客破解算法。
SSH密钥的工作原理是什么?
SSH密钥对用于验证希望通过SSH协议访问远程系统的用户或进程的身份。公钥由用户和远程服务器共同用于加密消息:在远程服务器端,公钥保存在公钥文件中;在用户端,公钥存储在SSH密钥管理软件或用户计算机的本地文件里。私钥仅保留在用于访问远程服务器的系统上,用于解密消息。
当用户或进程通过SSH客户端请求连接远程服务器时,会启动质询-响应流程以完成认证。SSH服务器识别到连接请求后,使用双方共有的公钥信息发送加密的质询请求;随后SSH客户端解密质询消息并向服务器返回响应。用户或进程必须正确响应质询才能获得访问权限。整个质询-响应流程由SSH客户端与服务器自动完成,无需用户手动操作。
SSH公钥认证与密码认证的对比
从高层逻辑来看,SSH密钥和密码的作用类似,都是用于控制访问,但二者的相似性仅此而已。数字身份需要具备足够的强度以避免被盗,具备便捷性以实现快速、无中断的访问,还要具备前瞻性,帮助企业提前应对潜在威胁。
密码曾经能够提供一定程度的安全性,但如今其有效性已大不如前。这是因为恶意行为者已经越来越擅长通过互联网传输过程窃取密码、从存储仓库中盗取密码,以及通过暴力破解攻击获取密码。
人为因素进一步放大了这些安全风险与问题:人们会重复使用密码、共享密码,还经常遗忘密码。这给企业带来了高昂的成本——不仅包括数据丢失、服务中断和信息泄露造成的损失,还包括密码输入耗时、需要投入大量支持资源,以及必须频繁重置密码带来的运营成本。
借助公钥基础设施(PKI)的密码强度与认证机制,SSH密钥不易受到恶意攻击;即使服务器被攻破,合法凭证也不会被泄露。PKI密码技术在持续改进,能够为身份提供前瞻性防护,抵御不断演变的新型威胁。
SSH密钥认证也比密码认证更便捷。密钥会自动发起认证流程并授予访问权限,将用户和进程连接到服务器,用户无需记住密码,也不用在访问每个系统时都输入密码。
即便如此,您始终应当为SSH私钥设置密码保护,或将其存储在硬件令牌中以增强安全性。
查找SSH密钥的位置
在使用SSH密钥之前,您需要先检查自己的用户账户下是否已有SSH密钥;如果没有,则需要创建密钥。创建SSH密钥有多种方式,例如使用YubiKey或其他硬件安全方案——这类方式通常安全性最高。而对于基础配置场景,您可以使用.ssh目录。
如果选择使用 .ssh 目录,可按照以下步骤查找 SSH 密钥对:
进入个人目录,查找 SSH 目录。Linux 和 MacOS 的默认路径为 ~/.ssh 目录;Windows 的默认路径为 C:\Users\<username>\.ssh。
查找名称类似 id_dsa 或 id_rsa 的两个文件:一个带有 .pub 扩展名,另一个没有(例如 id_rsa.pub 和 id_rsa)。.pub 文件是公钥,另一个是私钥。公钥不一定始终存在,因为客户端无需公钥即可正常工作。
如果在目录中未找到这些文件,或者根本不存在该目录,则需要创建 SSH 密钥。
如何生成 SSH 密钥对
生成 SSH 公钥/私钥密钥对,可手动操作,也可使用自动化证书管理系统完成。
在大多数主流操作系统上均可手动生成并存储新的 SSH 密钥。Windows 系统可通过 ssh-keygen 命令行工具或 PuTTy 等 SSH 客户端生成密钥;MacOS 和 Linux 系统可通过终端窗口生成密钥。
要生成 SSH 密钥,请完成以下命令行步骤:
输入密钥生成命令 $ ssh-keygen -t rsa
输入用于保存密钥的文件路径。密钥通常存储在 home 目录或 ~/.ssh/ 目录下(例如 /home/foldername/.ssh/id_rsa 或 /c/Users/username/.ssh/id_rsa)。确认目标文件名后按回车键。
输入通行短语,也可留空不设置通行短语。注意:通行短语可为密钥对提供额外一层密码保护,但用户每次使用密钥对时都需要输入该通行短语。
密钥对生成后,下一步是将公钥部署到远程服务器。系统管理员可使用 ssh-copy-id 命令将 SSH 公钥复制到远程服务器的 authorized_keys 文件中(例如 $ ssh-copy-id username@IP address)。也可以通过安全 shell 命令粘贴公钥(例如 $ cat ~/.ssh/id_rsa.pub | ssh username@IP address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys")。
完成上述步骤后,即可使用私钥文件进行 SSH 身份认证。
配置 SSH
可通过修改服务器上的系统级配置文件来配置 SSH,该文件通常名为 /etc/ssh/sshdc_config。
访问 /etc/ssh/ssh_config 文件后,可通过该文件控制哪些用户、哪些用户组拥有服务器的 SSH 访问权限。
同理,本地客户端配置可在 .ssh/config 文件中完成。用户可通过该文件按主机添加特定配置,包括但不限于为每台服务器指定使用的私钥、设置用户名以及配置 SSH 隧道。
SSH 密钥管理
妥善的 SSH 密钥管理对企业至关重要,因为这些密钥可授予对核心业务系统和数据的访问权限。然而,手动管理密钥耗时且容易出错。企业环境中通常存储着数千甚至数百万个密钥,进一步提升了管理复杂度。如果未建立并主动执行配置、发放和注销相关策略,密钥提供的安全防护很容易失效。
例如,当已颁发的密钥不再需要时(比如员工离职的场景),IT人员可能会忘记注销这些密钥。这类孤立密钥几乎无法被发现,进而带来风险:它们可能存在于未受到严格管控的系统中。如果这些孤立密钥未受保护,就可能被恶意攻击者窃取,攻击者随后可利用仍处于有效状态的凭据访问您的核心业务系统和数据。
目前已有借助ssh-agent辅助程序实现的专用SSH密钥管理解决方案,可完成密钥的配置下发、部署设置与注销操作。使用这类解决方案的效果远优于手动管理,但这种方式需要工作繁忙的IT人员在现有安全与管理解决方案之外,额外使用另一款管理工具。IT团队应当选用能够自动管理所有基于公钥基础设施(PKI)的证书的集中式证书管理解决方案。采用统一的证书管理方式,可让IT人员在同一个仪表板中完成全部密钥管理工作。
