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

相关推荐
breeze jiang16 小时前
ESLint flat config 配置实战:五大字段、规则严重级别与 --fix 能力边界详解
开发语言·前端·javascript
书中枫叶16 小时前
做了个「句拾」小程序,最难的不是业务,是字体
前端·javascript·vue.js
FFF_6345602316 小时前
简单的画板小工具,下载即用
前端·javascript·css
嘟嘟071717 小时前
Next.js 里 SSR、CSR 和水合到底差在哪?从一段待办代码说起
前端·后端·next.js
南雨北斗17 小时前
回调地狱、jQuery jqXHR .then 链式、Promise + async/await写法对比
前端
liuxiaocheng17 小时前
快速上手:5 分钟跑通第一个 AI SDK 例子
前端·人工智能·后端
霹雳桃17 小时前
移动端 H5 折叠屏适配实战:为什么 max-width 没用,min(vw, px) 才是正解
前端·前端框架
_道隐_17 小时前
git stash如何pop指定的stash change?
git
Goodbye17 小时前
useContext 上下文与自定义 Hooks:跨层级数据共享的优雅方案
前端