服务器公匙是密钥对中公开分发的那一半,用于加密数据或验证签名,搭配私匙完成解密与身份认证,本身不承担解密任务。
公匙到底是什么形象的说法
把服务器想象成一扇带智能锁的门,公匙相当于发给所有访客的加密信封,谁都可以往里面塞纸条,但塞进去之后只有私匙能打开,私匙是唯一能开锁的钥匙,只存在于服务器管理员手里。
行业共识认为,公匙设计最关键的特性是非对称性,公匙加密的内容,私匙能解开;私匙签名的内容,公匙能验证,但公匙自己无法解密自己加密过的数据,这从数学算法上就隔绝了泄露风险。
具体到服务器运维场景,公匙天天打着照面,但很少被单独提到,更多时候它和私匙被统称为“密钥对”,服务器生成密钥对后,公匙被放进authorized_keys文件,私匙留在客户端,登录动作发生时,服务器用公匙生成一个随机挑战,客户端用私匙应答,验证通过即放行,这就是免密登录的底层层逻辑。
服务器公匙和私匙的区别,两者职责如何划分
| 对比维度 | 公匙 | 私匙 |
|---|---|---|
| 是否公开 | 可随意分发 | 必须保密,泄露即失效 |
| 核心用途 | 加密数据、验证签名 | 解密数据、生成签名 |
| 泄露后果 | 无直接风险 | 服务器可被任意登录 |
| 常见后缀 | .pub |
无固定后缀 |
| 生成方式 | 由私匙推导 | 随机生成,无法反向推出 |
公匙和私匙不是两把独立的钥匙,而是一对数学上绑定的数字关系

,生成时先产生私匙,再通过椭圆曲线或RSA算法推导出公匙,私匙丢了,公匙也失去意义,整个密码对需要重新生成。
实操里有种常见误区:有人把公匙当密码一样保护起来,其实没必要,公匙本身就是设计来公开的,放到GitHub、云服务器元数据、代码仓库里都安全,真正需要严防死守的是私匙,一旦私匙泄出,拥有者就能冒充管理员登录服务器。
服务器公匙在三个典型场景中的具体用法
SSH免密登录
这是接触最多的场景,在本地生成密钥对:
ssh-keygen -t ed25519 -C "deploy@your-server"
生成的id_ed25519.pub就是公匙,内容是一行以ssh-ed25519开头的长字符串,把它追加到服务器的~/.ssh/authorized_keys文件里:
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
之后每次SSH登录,服务器会验证客户端持有对应的私匙,校验通过直接登录,不再询问密码,运维同学批量管理几十台服务器,通常都是靠这套机制配合跳板机完成。
HTTPS证书签发
网站启用HTTPS时,管理员生成一个私匙和证书签名请求,证书颁发机构用公匙验证域名控制权,签发的证书里就嵌入了网站的公匙,浏览器访问网站时,服务器把证书发给浏览器,浏览器用证书里的公匙验证服务器身份,然后协商一个临时会话密钥完成加密传输。
这里公匙扮演的角色是身份证明的第一道关卡,哪怕有人伪造了IP和域名,没有对应的私匙也无法通过公匙验证。
Git仓库身份验证
Git托管平台会在用户设置里放一个“SSH Keys”入口,把生成的公匙粘贴进去,之后的

git push就不再需要输入账号密码,平台服务器用公匙验证每次提交请求确实来自这个开发者,从机制上防止冒充提交。
服务器公匙怎么查看,Linux常用命令整理
登录服务器后,用以下命令查看已有公匙:
cat ~/.ssh/authorized_keys # 查看已授权的公匙列表 cat /etc/ssh/ssh_host_ed25519_key.pub # 查看服务器主机公匙
确认某台服务器公匙指纹:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
输出类似SHA256:abcdef123456...的指纹字符串,用于核对服务器与本地记录是否一致,防止中间人攻击。
Windows环境下,用type C:Users用户名.sshid_ed25519.pub。
更换服务器硬件时,管理员经常需要比对新旧公匙指纹,确认迁移过程没有中间人篡改,这是运维面试里常考的基础安全问题,也是日常巡检该关注的点。
服务器公匙配置里那些容易踩的坑
权限设置不当导致登录失败
公匙文件权限过宽会让SSH服务直接忽略它,配置文件~/.ssh/authorized_keys的权限必须设为600,.ssh目录设为700:
chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
很多新手调试半天登录不上去,最后发现就是权限多了个group read权限位。
公匙与私匙不匹配
多台设备混用时,经常出现公匙是A机器的,私匙却在B机器上,SSH会直接拒绝认证,日志里出现Permission denied (publickey),解决思路是确认本机私匙对应的公匙确实存在于服务器的authorized_keys中,用ssh-keygen -y -f 私匙文件可推导出对应公匙,比对即可定位问题。
暴力破解防护

直接把公匙认证作为唯一登录方式,并关闭密码登录,是防止服务器被扫号爆破的有效手段,编辑/etc/ssh/sshd_config:
PasswordAuthentication no PubkeyAuthentication yes
修改后重启服务:sudo systemctl restart sshd,先保持原SSH会话不断开,确认新会话能正常登录再退出,否则配置错了就把自己锁在门外了。
Q&A:服务器公匙相关常见疑问
服务器公匙和密码能同时用吗
可以,SSH默认先尝试公匙认证,失败后降级为密码认证,但安全要求较高的生产环境通常会关闭密码登录,只保留公匙认证,减少暴力破解面,具体以实际运维策略为准,没有统一的强制性规范。
服务器公匙过期了怎么处理
公匙本身没有过期时间概念,服务器上公匙“失效”通常是两种情况:一是对应的私匙被替换或删除,二是管理员主动将公匙从authorized_keys文件中移除,公钥基础设施体系里也有证书有效期机制,那属于X.509证书体系,通过证书吊销列表或有效期字段控制,跟SSH公匙不是同一套体系。
多个设备要登录同一台服务器该怎么配公匙
每台设备生成各自的密钥对,将每台设备的公匙分别追加到服务器的authorized_keys文件中,一行一个,日后移除某台设备的访问权限时,只需删掉对应那一行,不影响其他设备,批量管理场景中,也可以借助配置管理工具统一下发公匙,但原理一致,都是对authorized_keys文件做维护。
服务器公匙的价值在于把“密码”从登录流程中拿掉,换成只有持有私匙才能完成的数学证明,配置一次,长期受益,但前提是私匙保管得当,只要私匙不泄露,公匙怎么分发都不用担心。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/891461.html

