git客户端公钥怎么传到服务器?,ssh密钥配置失败怎么办

把客户端公钥推送到服务器的核心操作,就是通过ssh-copy-id命令一键完成授权,或者手动将~/.ssh/id_rsa.pub追加到服务器端的~/.ssh/authorized_keys文件中,掌握了这两种方式,你就不再需要每次连接都输入密码了。

为什么要先理解公钥与私钥的配对逻辑

很多新手在配置免密登录时,容易把“推”和“拉”的关系弄反,客户端生成的是一对密钥:私钥留在本地(相当于你的身份证),公钥放到服务器(相当于门禁系统里的备案信息),服务器验证的是签名,不是密码本身。

【Git教程】5-8 SSH公钥配置
加载中
【Git教程】5-8 SSH公钥配置

理解authorized_keys文件的作用

服务器端的~/.ssh/authorized_keys文件是整个免密机制的核心,当你在客户端发起SSH连接时,服务器会用这个文件里的公钥来挑战你的私钥,如果匹配成功,直接放行,行业共识认为,理解这个文件的管理权限比记住命令本身更重要文件权限必须是600,所属目录权限必须是700,否则SSH服务会出于安全考虑忽略该文件。

确认本地是否已有密钥对

在推送之前,先检查本地是否存在密钥,打开终端执行:

ls -la ~/.ssh/

如果看到id_rsa和id_rsa.pub两个文件,说明已经生成过密钥对。id_rsa是私钥,务必不要泄露;id_rsa.pub是公钥,就是待会儿要推送到服务器的内容,如果目录为空或者根本没有.ssh目录,则需要重新生成。

git公钥生成后怎么配置

这是国内开发者最常搜索的操作路径,生成密钥的步骤极其简单,但很多人卡在了“生成后不知道该拿这个文件怎么办”,这里给出标准流程。

使用ed25519算法生成更安全的密钥

较新的SSH版本支持ed25519算法,相比传统的rsa更安全且长度更短,执行以下命令:

ssh-keygen -t ed25519 -C "你的邮箱或备注"

如果服务器版本较老,只能兼容RSA,则改用:

ssh-keygen -t rsa -b 4096 -C "你的邮箱或备注"

回车后系统会询问保存路径和密码短语。路径直接回车默认即可,密码短语可以不设置(直接回车两次),但如果追求更高的安全性,建议设置一个,注意,设置密码短语后,每次使用私钥都需要输入这个短语,实际操作中很多人因为嫌麻烦而留空。

复制公钥内容的两种方式

生成完毕后,公钥文件是纯文本,内容格式为ssh-ed25519 AAAA... 你的备注,在Linux或macOS下用cat

git客户端公钥怎么传到服务器?,ssh密钥配置失败怎么办

命令查看,在Windows的PowerShell下用type命令查看。

cat ~/.ssh/id_ed25519.pub

完整复制输出的所有内容,这是接下来要推送到服务器的核心数据。

ssh公钥推送到服务器命令有哪些

最常见的推送命令是ssh-copy-id,它帮你省去了手动创建目录和处理权限的麻烦,但很多用户想了解更底层的实现原理,我这里把三种典型方式都列出来。

ssh-copy-id一键推送

这是最推荐的方式,尤其适合不熟悉Linux文件权限的新手。

ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP

执行后输入一次服务器密码,公钥就会自动追加到服务器上对应用户的authorized_keys文件中,命令内部做了三件事:连接服务器、创建.ssh目录(如果不存在)、将公钥追加到authorized_keys。执行完务必测试免密登录:

ssh 用户名@服务器IP

如果直接进入服务器而不再提示密码,推送成功。

手动追加公钥

当ssh-copy-id不可用(部分精简版系统未安装此工具)时,采用手动方式,先在本地查看公钥内容并复制:

cat ~/.ssh/id_ed25519.pub

然后登录服务器:

ssh 用户名@服务器IP

在服务器上执行以下命令:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴你刚才复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

注意,你的服务器登录用户决定了公钥归属于哪个账户,比如用root登录,那公钥就只对root用户生效,如果你平时用普通用户登录,就要在普通用户的家目录下执行上述操作,这一步是git公钥生成后怎么配置中最容易出错的地方很多用户用root配置完,切换普通用户登录时发现仍要密码。

scp传输后追加

如果公钥文件在本地,也可以通过scp传到服务器临时目录,再登录服务器追加。

scp ~/.ssh/id_ed25519.pub 用户名@服务器IP:/tmp/
ssh 用户名@服务器IP
cat /tmp/id_ed25519.pub >> ~/.ssh/authorized_keys
rm /tmp/id_ed25519.pub

这种方式适合公钥内容过长、手动复制容易遗漏的场景。

GitHub和Gitee平台的公钥配置差异

大多数开发者使用git不仅仅是连接自己的服务器,还要推送代码到代码托管平台,这个场景下,“服务器”变成了平台方的服务器,配置路径从命令行变成了网页操作。

git客户端公钥怎么传到服务器?,ssh密钥配置失败怎么办

GitHub配置路径

登录GitHub后,依次进入Settings → SSH and GPG keys → New SSH key随意填写,Key区域粘贴你的公钥内容,点击添加,这里的核心坑在于:粘贴时不能有多余空格或换行符,粘贴后仔细检查前后是否有遗漏。

Gitee配置路径

Gitee的路径是设置 → 安全设置 → SSH公钥,整个流程与GitHub类似,但据部分开发者反馈,Gitee的密钥校验有时存在缓存延迟,添加后等待几分钟再测试连接比较稳妥。

公司内部GitLab配置路径

内网部署的GitLab通常路径为Preferences → SSH Keys,部分企业开启了LDAP或SSO登录,这种情况下公钥绑定的是企业的统一身份ID,离职后公钥自动失效,无需手动删除。

测试连接是验证推送是否成功的唯一标准

很多人在配置完公钥后直接git clone,提示权限错误就懵了,测试连接的命令如下:

对于GitHub:

ssh -T git@github.com

看到Hi 你的用户名! You've successfully authenticated 说明成功。

对于Gitee:

ssh -T git@gitee.com

对于自有服务器:

ssh -T 用户名@服务器IP

有些操作场景下推出了ssh config配置来管理多主机密钥,如果你同时使用多个平台,建议在~/.ssh/config中为不同主机指定不同的密钥文件:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github
Host myserver
  HostName 192.168.1.100
  User root
  IdentityFile ~/.ssh/id_ed25519_server

这样配置后,git clone git@github.com:用户名/仓库名.git会自动匹配对应的密钥,不用手动切换。

git ssh密钥配置失败常见原因排查

即使操作步骤完全正确,依然有部分开发者遇到配置后不生效的情况,根据多个技术社区的问题汇总,绝大多数失败集中在以下四个原因。

本地私钥和公钥不匹配

如果你之前生成过多次密钥,又在不同目录下执行过操作,可能推送的是A公钥,而当前环境里git使用的是B私钥,排查方法:

ssh-add -l

这个命令列出当前SSH代理中加载的私钥,如果列表为空,手动添加:

ssh-add ~/.ssh/id_ed25519

服务器端目录权限错误

这是手动配置时最常见的问题,用下面命令修复:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

git客户端公钥怎么传到服务器?,ssh密钥配置失败怎么办

注意,~/.ssh目录的父目录(即你的家目录)也不能被其他用户写入,否则SSH会拒绝信任,执行:

chmod go-w ~

密钥格式不被服务器接受

部分老版本操作系统自带的SSH服务不认ed25519格式公钥,观察服务器系统版本,如果是CentOS 6或更早的Ubuntu版本,建议重新生成RSA格式密钥,或者用ssh-keygen -p -f ~/.ssh/id_ed25519 -m PEM转换格式。

多个公钥混用导致认证顺序问题

如果有多个公钥文件在~/.ssh目录下,SSH客户端会按顺序尝试,如果某个公钥被服务器拒绝,可能不会自动尝试下一个,解决方式是在~/.ssh/config中通过IdentitiesOnly yes参数强制使用指定密钥。

用户常问的关于公钥推送的实操问题

git配置公钥后clone依然提示要密码是什么原因

这个情况基本可以断定公钥没有被正确加载,先跑一遍ssh -T git@github.com(或对应的平台),看输出信息,如果是Permission denied (publickey),重点检查当前git仓库的远程URL是否使用的是SSH协议,如果你在clone时用的是https://开头的链接,git会走用户名密码认证,与公钥完全无关,解决办法是修改远程地址:

git remote set-url origin git@github.com:用户名/仓库名.git

公司电脑换新后怎么把旧公钥推送到新服务器的备份

如果你在新电脑上重新生成了一对密钥,且需要推送的服务器还在运行,直接在新电脑上执行ssh-copy-id即可,但注意:新公钥追加到authorized_keys后,旧公钥默认仍然保留,从安全角度考虑,建议登录服务器,手动编辑authorized_keys文件,删除不再使用的旧公钥行,避免离职员工或丢失的设备继续拥有访问权。

多台电脑是否可以共用同一份公钥

技术上完全可以,将同一公钥文件的内容复制到多台需要连接的本地机器上,配上对应的私钥即可,但行业专家指出,多台设备共用同一私钥会扩大泄露面,任一台设备被攻破,私钥就泄露了,所有服务器都会暴露,对于追求高安全性的团队,推荐每台设备生成独立密钥对,然后在服务器上追加多个公钥,每个公钥占一行,这样即便某个设备丢失,只需在服务器上删除对应行即可精准回收权限,不影响其他设备。

服务器端的authorized_keys文件每行对应一个公钥,完全支持数百个条目,维护多个公钥的加分操作是:在每个公钥末尾的备注里加上设备名或使用人姓名,方便后续识别和清理。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/git%e5%ae%a2%e6%88%b7%e7%ab%af%e5%85%ac%e9%92%a5%e6%80%8e%e4%b9%88%e4%bc%a0%e5%88%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%9f%ef%bc%8cssh%e5%af%86%e9%92%a5%e9%85%8d%e7%bd%ae%e5%a4%b1%e8%b4%a5%e6%80%8e/

赞 (0)
QQ空间一直提示服务器繁忙怎么解决,QQ空间打不开是什么原因
上一篇 2026年9月15日 10:00
GTA5注册服务器错误怎么破,线上模式进不去怎么办
下一篇 2026年9月15日 10:01

相关推荐

  • ajax跳转时如何传递数据库数据?前端ajax传参到后端数据库

    在AJAX跳转中传递数据库数据的核心在于后端接口化:前端通过异步请求获取JSON格式数据,而非直接跳转页面,从而实现无刷新局部更新,很多开发者在构建现代Web应用时,常陷入一个误区,认为“跳转”必须伴随整个页面的重载,当我们需要处理复杂的数据库交互时,传统的表单提交或链接跳转不仅效率低下,还会导致用户体验断裂……

    2026年5月31日
    4300
  • WAN口设置已断开无响应怎么办,路由器WAN口怎么修复?

    wan口设置已断开服务器无响应,多半是物理链路、上网账号或路由器拨号逻辑出问题,按“查网线→查光猫→查拨号参数→重置WAN口”的顺序排查,大多数情况能在几分钟内恢复,wan口设置已断开是什么意思?先搞懂路由器的“抱怨”路由器背后的WAN口,就是它和外部网络打交道的“大门”,当你看到后台提示“WAN口设置已断开……

    2026年10月5日
    000
  • 泰拉瑞亚手游服务器ip地址怎么弄

    要获取泰拉瑞亚手游的服务器IP地址,你需要根据联机方式选择:如果使用官方服务器,直接通过游戏内搜索或输入域名;如果自建服务器,需要获取你的公网IP或使用内网穿透工具;如果加入他人服务器,需要对方提供IP地址,泰拉瑞亚手游服务器ip地址怎么获取?获取IP地址的途径取决于你是打算加入现有服务器还是自己搭建,从官方服……

    2026年8月18日
    1300
  • 服务器无法从U盘启动怎么办,启动不了怎么解决?

    服务器无法从U盘启动,多数情况下不是U盘坏了,而是启动模式、U盘格式和RAID卡初始化三者没对齐,先把U盘插到后置USB口,开机按F11进入临时启动菜单选U盘,再进BIOS把Boot Mode改成与U盘一致的UEFI或Legacy,服务器u盘启动和普通电脑区别:别用装PC的套路套服务器服务器开机过程比普通电脑慢……

    2026年9月9日
    400
  • AIoT现状和发展如何?AIoT行业前景怎么样

    AIoT(智能物联网)正处于从“连接爆发”向“智能融合”跨越的关键分水岭,行业已告别单纯堆砌硬件设备的粗放增长模式,全面进入以场景化应用、边缘计算赋能和数据价值挖掘为核心的精细化运营阶段,未来三到五年,具备“端侧感知、边侧推理、云端训练”协同能力的AIoT解决方案,将成为企业数字化转型的核心引擎,而能否打通数据……

    2026年3月15日
    12400
  • asprintf用法详解,如何正确使用C语言中的动态字符串格式化函数?

    asprintf是C语言标准库中一个强大且安全的动态字符串格式化函数,它能够自动分配足够的内存来存储格式化后的字符串,从根本上避免了传统sprintf可能导致的缓冲区溢出问题,其函数原型为:int asprintf(char **strp, const char *format, …);,调用成功时,它会将……

    2026年2月4日
    11300
  • PDA和服务器时间为什么不一致?,怎么解决?

    PDA与服务器时间不一致,核心原因在于PDA的本地时钟同步机制失效,通常由网络波动、NTP服务配置错误、时区偏差或系统Bug引起,可通过手动同步或调整NTP设置解决,PDA与服务器时间不同步的常见原因PDA作为移动数据采集终端,其时间依赖本地晶振和网络校时,当两者出现偏差,问题往往出在以下几个环节,网络延迟或断……

    2026年7月29日
    2000
  • note3手机怎么设置网络连接服务器,怎么设置网络连接

    Note3手机设置网络连接服务器,核心操作是先确认你的机型是三星、小米还是红米,再选择WiFi、APN接入点或代-理服务器三种方式之一,其中国内用户最常用的是修改APN接入点来解决连不上服务器的问题,连接服务器前先分清你的Note3是哪款市面上叫“Note3”的手机至少有三款,系统差异很大,设置路径完全不同,搞……

    2026年8月13日
    700
  • T3服务器怎么采集另一台电脑信号,T3服务器怎么设置?

    要给T3服务器采集另一台电脑的信号,核心是通过网络连接或物理串口,配合专业数据采集软件,实现实时数据交互, 下面从具体步骤、方案对比、价格分析到常见问题,完整梳理整个流程,t3服务器采集电脑信号的具体步骤硬件连接与网络配置首先将T3服务器和目标电脑通过网线直连,或接入同一台千兆交换机,在服务器上设置固定IP,例……

    2026年7月29日
    900
  • AIoT生态图是什么?2026年最新AIoT生态图谱详解

    AIoT生态系统的核心价值在于实现了“万物互联”向“万物智联”的跨越,其本质是构建一个数据驱动、智能决策的闭环体系,在这个体系中,端侧设备、边缘计算节点与云端智能平台深度融合,共同构成了一个具备感知、交互、决策能力的有机整体,对于企业和开发者而言,理解并掌握AIoT生态图的构建逻辑,是抢占下一代智能产业高地关键……

    2026年3月14日
    13700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注