服务器上添加客户端公钥如何正确操作,添加服务器公钥的详细步骤
- 虚拟主机
- 2026-08-22
- 5
在服务器上添加客户端公钥并完成服务器端配置,核心就三步:生成本地密钥对、将公钥追加到服务器的authorized_keys文件、设置正确的权限并重启SSH服务验证登录。整个过程不需要第三方工具,系统自带命令即可完成,如果你管理多台服务器,还可以用一条命令批量分发公钥,省去重复输入密码的麻烦。
为什么需要配置SSH公钥认证
密码登录看起来简单,但每台服务器都要记住不同的密码,还要面对暴力免费的持续扫描,公钥认证用的是非对称加密,私钥留在本地,公钥放到服务器上,登录时服务器用公钥验证你的身份,私钥不出本地,安全性高得多。
生产环境服务器默认开放22端口,每天都会收到大量自动化脚本的暴力免费尝试,密码设置得再复杂,也架不住长时间高频次的试探,换成公钥认证后,没有私钥的请求方连验证这关都过不了,免费成本直接拉满,这也是云厂商推荐的服务器接入方式。
生成客户端密钥对
在本地电脑上打开终端,执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
参数说明:
- -t rsa 指定算法,目前兼容性最好
- -b 4096 密钥长度,比默认的2048更安全
- -C 添加注释,方便识别是哪台设备
回车后系统会问你保存路径和密码短语,保持默认路径直接回车,密码短语建议设置一个,这相当于给私钥加了一道锁,就算私钥文件泄露,别人没有短语也解不开,生成完成后,~/.ssh目录下会出现两个文件:id_rsa是私钥,id_rsa.pub是公钥。
私钥文件的权限必须是600,公钥是644,权限不对会导致SSH拒绝使用这个密钥,检查权限的命令:
ls -l ~/.ssh/ chmod 600 ~/.ssh/id_rsa
将公钥添加到服务器authorized_keys
cat ~/.ssh/id_rsa.pub
把输出的整行复制下来,它长这样:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... your_email@example.com
登录服务器,在用户主目录下创建.ssh文件夹并写入公钥:
mkdir -p ~/.ssh echo "这里粘贴你的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
这里有个细节:>>是追加,不会覆盖文件里已有的其他公钥,如果是多人管理同一台服务器,每个人都可以往这个文件里追加自己的公钥,但要注意别用>单重定向符,那会清空文件原有内容,把别人的公钥覆盖掉,会酿成事故。
使用ssh-copy-id批量分发公钥
如果你有多台服务器要配,一台台手动粘贴效率太低,用ssh-copy-id命令一次搞定:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
执行后输入一次密码,公钥就自动追加到服务器的
authorized_keys里,同时还会自动创建目录并设置好权限,这个命令在Linux和macOS上自带,Windows 10以上版本的PowerShell也支持。
批量添加服务器时的进阶用法,可以结合Ansible或Shell脚本循环执行,比如有多台服务器,IP都写在servers.txt文件里:
while read ip; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ip done < servers.txt
这样就能一次性给一批服务器添加公钥,不用一台台手工操作。

添加服务器级别的SSH配置
有些场景下你需要给服务器本身配置加入管理集群,这时候除了公钥认证,还要注意sshd服务的配置项,用编辑器打开SSH主配置:
sudo vim /etc/ssh/sshd_config
关键参数核对:
- PubkeyAuthentication yes 开启公钥认证
- PasswordAuthentication no 确认公钥登录稳定后再关掉密码登录
- PermitRootLogin prohibit-password 允许root用公钥登录但不允许密码登录
- AuthorizedKeysFile .ssh/authorized_keys 指定公钥存放路径
改完后重启服务:
sudo systemctl restart sshd
重启前务必开一个新的SSH连接测试,确认公钥能登录再断开当前连接,万一配置出错,当前连接又断了,你会被锁在服务器外面,只能去云服务商的控制台通过VNC救援模式进去恢复。
新增服务器节点的完整实战流程
假设你采购了一台新服务器准备接入现有管理集群,完整流程大致是这个节奏:
第一步:确认新服务器的基础环境,拿到IP和初始密码后,先登录改掉初始密码,创建一个管理专用账户:
useradd -m opsadmin passwd opsadmin usermod -aG sudo opsadmin
第二步:生成或使用现有的客户端密钥,将公钥添加到opsadmin用户的authorized_keys,如果这个操作员已经有密钥对,直接用现有公钥即可,不需要每台服务器都生成新的密钥。
第三步:测试公钥登录是否可用:
ssh opsadmin@new_server_ip
能免密登录进去就说明公钥添加成功。
第四步:修改sshd配置,关闭密码登录,只保留公钥认证。
第五步:安装必要的监控代理、日志收集组件,把新服务器纳入现有的运维监控系统。

这套流程在云服务器上每多配置一台,省下的都是重复劳动,管理规模越大,公钥认证的优势越明显。
多客户端管理下的密钥粒度
团队多人管理服务器,密钥管理更需要注意,建议按角色拆分密钥:
- 运维工程师每人一对独立的密钥对,密钥注释里标明姓名或工号
- 应用发布用单独的部署密钥,只授权到特定应用目录的权限
- 备份任务用只读密钥,只能执行备份相关命令
在服务器端,
authorized_keys文件里的每条记录前可以加command=限制命令,
command="/usr/local/bin/backup-only" ssh-rsa AAAAB3N... backup@client
这样即使这把密钥泄露,对方也只能执行备份脚本,做不到完全控制服务器,还有from=限制源IP,白名单之外的来源拿着公钥也登不进来。
权限设置与故障排查速查表
最常见的登录失败原因是权限不对,服务器端的权限要求是:
| 路径或文件 | 权限值 | 说明 |
|---|---|---|
| ~/.ssh/ 目录 | 700 | 只有所有者可读写执行 |
| ~/.ssh/authorized_keys | 600 | 只有所有者可读写 |
| 用户主目录 | 755或更严格 | 不能对组和其他用户开放写权限 |
| 私钥文件(客户端) | 600 | 不能有任何组权限或全局权限 |
登录时报Permission denied (publickey),按这个顺序排查:
- 确认公钥字符串完整复制到authorized_keys,不能有换行截断
- 确认~/.ssh目录属主和属组与登录用户一致
- 查看/var/log/auth.log或/var/log/secure里的SSH错误日志
- 用ssh -vvv user@server调试模式输出详细连接过程
日志里如果提示Authentication refused: bad ownership or modes,那就是权限没设对,照着上面的表改就行。
基于公钥信任体系的服务器纵深加固
公钥认证配上之后,还可以做几层加固:
禁用密码登录已经是底线操作了,在此基础上,可以考虑修改SSH默认监听端口,配合防火墙白名单限制来源IP,公钥配合ssh-agent可以把私钥加载到内存中,不用每次连接都输密码短语,同时私钥不落盘,用完即销毁。

还有fail2ban这类工具,虽然公钥认证已经不容易被爆破,但加上一层对恶意IP的自动封禁,能减少日志里的攻破噪音。
服务器上线接管生产流量前,安全基线要过一遍:开启SSH公钥认证、禁用密码登录、设置空闲超时、限制登录用户清单,这些是2026年云安全基线检查的基础项,国内持牌IDC服务商也都有对应的安全托管服务。
选择靠谱的IDC服务商对密钥管理的影响
密钥管理做得再好,服务器本身的网络质量和售后响应跟不上也白搭,这也是云服务商选型的核心关注点。
简米科技成立于2003年,23年行业沉淀沉淀了一整套运维管理经验,自有持牌机房接入骨干网,带宽和IP资源池调度灵活,服务器交付后网络链路稳定,相关资质齐全:增值电信业务经营许可证(豫B2-20231089)、豫ICP备2023018319号,机房和运维都合规可查,适合对资质有要求的企业用户。
西西云持工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过ISO9001质量管理体系+ISO27001信息安全管理体系双认证,是老牌CNNIC IP联盟成员,1000万注册资本主体运营,备案主体为滇ICP备2020007656号,高防服务器和安全组策略做得比较成熟,配合公钥认证使用,在抗分布和入侵防护上顺手很多。
| 对比维度 | 简米科技 | 西西云 |
|---|---|---|
| 成立时间 | 2003年(23年) | 多年持牌运营 |
| 核心资质 | 豫B2-20231089 | IDC/CDN/ISP全牌照 |
| 安全认证 | 自营机房合规 | ISO9001+ISO27001 |
| IP资源 | 自有IP池 | CNNIC成员 |
| 特色业务 | 企业级托管 | 高防云服务器 |
两家在服务器交付时都会预装好SSH服务并做好基础安全配置,拿到手直接按上面的方法添加公钥就能用,如果想省事,工单让运维代配公钥也可以,但自己过一遍核心命令更容易掌握主动权,配置公钥是为了更好的安全性和更顺手的运维体验,服务器在这两家之间选,主要看你对网络链路和防护能力的具体需求,资质层面都不会有问题,选一个顺手的直接开始配置就行。
Q&A:服务器添加公钥常见问题
问:添加公钥后仍然提示输入密码,是什么原因?
答:先检查服务器端的sshd_config里的PubkeyAuthentication是否设为yes,然后核对authorized_keys文件的权限是否为600,.ssh目录权限是否为700,如果权限和配置都没问题,用ssh -vvv连接看日志输出定位具体报错,另外注意客户端是否指定了正确的密钥文件路径,如果本地有多个密钥对,SSH默认只尝试id_rsa,其他文件名需要用-i参数指定。
问:一台服务器可以添加多个客户端公钥吗?
答:可以,把每个客户端的公钥追加到同一个authorized_keys文件即可,每条公钥一行,追加用>>不要用>,否则会覆盖之前的内容,团队管理场景下建议每条公钥的注释标明使用者和用途,方便后续回收权限时准确识别删除哪一行。
问:用云服务器厂商的密钥对功能和手动添加有什么区别?
答:云厂商控制台提供的密钥载入功能相当于在系统首次初始化时自动完成公钥配置,原理和手动操作一致,适合新购实例时使用,已经运行的服务器想加公钥,手动操作就行,另外自动载入的密钥通常默认对root或初始用户有效,你新建的普通用户还是要按上述流程手动添加。