Git中SSH连接

2026.7.23 星期四

SSH

SSH公钥设置

Windows 用户建议使用 Windows PowerShell 或者 Git Bash ,在 命令提示符 下无 catls 命令。

【说明】因为我的windows用户名是中文,Git Bash对中文路径的编码解析失败,把中文名解析成了乱码\267\353\315\361\342\371,导致无法识别.ssh目录。所以我就直接指定了一个纯英文路径的目录来生成密钥(步骤1),避开中文用户名的编码问题(若不是中文名,即跳过步骤1)

下面命令都在Git bash中执行

步骤1:创建一个纯英文目录

比如C:\ssh_keys

midir -p /c/ssh_keys

步骤2:生成密钥到这个纯英文路径

ssh-keygen -t ed25519 -C "你的邮箱" -f /c/ssh_keys/id_ed25519

  • -t:key类型
  • -C: 注释。给密钥加一个人类可读的标识,会写在公钥文件(.pub)末尾。推荐写自己邮箱
  • -f:强制指定到改文件下(可选)

按三次回车键即得到如下

查看生成的公钥和私钥

  • 私钥文件 id_ed25519
  • 公钥文件 id_ed25519.pub

步骤3:复制公钥到剪贴板

clip < ~/.ssh/id_ed25519.pub

这条命令会把公钥内容复制到剪贴板,之后就可以粘贴到 GitHub/GitLab 等平台的 SSH Keys 配置中。

或者可直接查看

标题后面的的SHA256是公钥的指纹,他是对公钥内容做哈希运算得到的的一串字符,作用是唯一标识这把公钥,方便你在多个密钥中快速区分。

步骤4:测试 SSH 连接是否正常

ssh -T git@gitee.com

如上图又发现是中文名的影响,所以我们手动指定私钥路径测试连接

ssh -T -i /c/ssh_keys/id_ed25519 git@gitee.com

看到绿色提示,就表示SSH认证成功啦!

Could not create directory '/c/Users/\267\353\315\361\342\371/.ssh' (No such file or directory). Failed to add the host to the list of known hosts...

但是还是会报错(中文用户名路径编码问题,SSH 无法自动创建 known_hosts 文件来记录信任的主机。)

已经成功认证了,只是少了一个 "记住主机" 的功能。下一次连接还是会问一次yes

中文名的解决方法

1.修复.bashrc,让Git永远用我们的配置文件

echo 'export GIT_SSH_COMMAND="ssh -F /c/ssh_keys/config"' > ~/.bashrc

echo 'alias ssh="ssh -F /c/ssh_keys/config"' >> ~/.bashrc

source ~/.bashrc

  • export GIT_SSH_COMMAND="ssh -F /c/ssh_keys/config"

    • 告诉 Git:所有 Git 操作(clone/pull/push)都用这个自定义的 SSH 配置文件,不再去默认的乱码路径找配置。
  • alias ssh="ssh -F /c/ssh_keys/config"

    • ssh 命令起别名:以后你直接敲 ssh,它也会自动加载 /c/ssh_keys/config,而不是去默认路径。
  • source ~/.bashrc

    • 让刚才的修改立即生效,不用重启终端。

2.生成C:\ssh_key\config,指定私钥路径并免yes确认:

cat > /c/ssh_keys/config <<'EOF'

Host gitee.com

IdentityFile /c/ssh_keys/id_ed25519

StrictHostKeyChecking no

EOF

  • cat > /c/ssh_keys/config <<'EOF' ... EOF

    • 这是 Bash 的多行写入语法 :把 EOF 之间的内容,完整写入到 /c/ssh_keys/config 文件里。
  • Host gitee.com

    • 这段配置只对 gitee.com 生效,不影响其他主机(比如 GitHub)。
  • IdentityFile /c/ssh_keys/id_ed25519

    • 明确告诉 SSH:连接 Gitee 时,私钥就用这个文件,彻底解决中文路径导致的 "找不到私钥" 问题。
  • StrictHostKeyChecking no

    • 核心作用:自动接受新主机的密钥,不再弹出 yes/no 确认提示,直接连接。

3.测试连接

ssh -T git@gitee.com

现在就可以不需要yes,直接ssh -T git@gitee.com就可以连接成功了

关于那两行警告,下方命令可消除。这样 SSH 会把主机记录存在 /c/ssh_keys/known_hosts,避开中文路径。

echo " UserKnownHostsFile /c/ssh_keys/known_hosts" >> /c/ssh_keys/config

touch /c/ssh_keys/known_hosts

步骤5:使用

克隆仓库

git clone git@gitee.com:你的名字/你的仓库名.git

拉取代码

git pull origin main

推送代码

git push origin main

相关推荐
MetaLite7 小时前
Java通用枚举驱动下拉框-元数据接口与前端契约
java·前端·状态模式
Json____7 小时前
基于 Node + Vue3 的选课管理系统:从教务业务到全栈实践
前端·node·毕设·wwwoop.com
创新技术阁7 小时前
FastapiAdmin 定时任务实现原理与新建任务实操指南
前端·后端·fastapi
3A Cloud7 小时前
Huashu Design:把 AI Agent 变成一间以 HTML 为画布的设计工作室
前端·人工智能·html
你别说话了7 小时前
Webpack 如何迁移重构到 Vite
前端·webpack·重构
catastrophe_zy7 小时前
如何用 WebCodecs 在浏览器里实现高清录屏 —— 无插件、无水印、直接导出 MP4
前端·javascript·录屏
芳心粽伙饭7 小时前
HTML第七章 表格标签
前端·html
我就是DaLing呀!7 小时前
vue3 + 独立的数据管理 Store实现视频剪辑功能
前端·typescript·vue3·canvas·store
吃杠碰小鸡8 小时前
Wps常用功能介绍
前端·wps
恋猫de小郭8 小时前
聊个比较有意思的 Flutter Web 问题
android·前端·flutter