因为国内的网络问题,github上的仓库用的比较少。最近拉仓库的时候发现,已经不能用密码clone仓库了;必须ssh链接。
创建SSH
步骤 1:检查 OpenSSH 是否可用:
-
在 Git Bash 中运行:
ssh -V
- 输出示例:OpenSSH_8.4p1, OpenSSL 1.1.1k 25 Mar 2021。
-
Git for Windows 自带 OpenSSH,无需额外安装。如果没有输出,重新安装 Git for Windows 并确保选择“Use bundled OpenSSH”。
步骤 2:生成 SSH 密钥
- 在 Git Bash 中运行以下命令(推荐使用 ED25519 算法,现代且安全):
ssh-keygen -t ed25519 -C "your_email@example.com"
- 将 your_email@example.com 替换为你在 GitHub 注册的邮箱。
-
设置密钥保存路径和密码:
-
提示 Enter file in which to save the key (/c/Users/YourUsername/.ssh/id_ed25519): 时,直接按 Enter 接受默认路径(~/.ssh/id_ed25519)。
-
提示输入密码(passphrase)时:
- 建议直接按 Enter 跳过(无密码),以避免每次使用 SSH 时输入密码。
- 如果设置了密码,需记住,后续可能需要输入。
-
-
确认密钥生成:
-
密钥生成后,会在 C:\Users\YourUsername.ssh\ 目录下生成:
- id_ed25519(私钥)
- id_ed25519.pub(公钥)
-
在 Git Bash 中运行以下命令查看:
-
ls -al ~/.ssh
步骤 3:将公钥添加到 GitHub
-
复制公钥内容:
- 在 Windows 资源管理器中打开 C:\Users\YourUsername.ssh\id_ed25519.pub,用记事本复制内容。
-
添加公钥到 GitHub:
- 登录 GitHub。
- 点击右上角头像 > Settings > SSH and GPG keys > New SSH key 或 Add SSH key。
- 在 Title 字段输入描述(例如 “Windows 10 SSH Key”)。
- 在 Key 字段粘贴公钥内容,点击 Add SSH key。
- 如果账户启用了双重认证(2FA),可能需要输入密码确认。
步骤 4:配置 SSH 客户端
-
启动 SSH 代理:
-
在 Git Bash 中运行:
eval "$(ssh-agent -s)"
-
输出示例:Agent pid 1234。
-
-
添加私钥到 SSH 代理:
-
运行:
ssh-add ~/.ssh/id_ed25519
-
如果使用 RSA 密钥,运行:
ssh-add ~/.ssh/id_rsa
-
如果设置了密钥密码,需输入密码。
-
-
(可选)配置 SSH 配置文件:
-
检查 ~/.ssh/config 文件是否存在:
ls ~/.ssh/config
-
如果不存在,创建并编辑:
bash
touch ~/.ssh/config nano ~/.ssh/config
-
添加以下内容(替换 id_ed25519 为你的私钥文件名,如果是 RSA 则为 id_rsa):
bash
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519
-
保存文件(Ctrl+O,Enter,Ctrl+X 退出 nano)。
-
设置文件权限:
bash
chmod 600 ~/.ssh/config
-
步骤 5:测试 SSH 连接
-
测试 GitHub SSH 连接:
-
在 Git Bash 中运行:
ssh -T git@github.com
-
如果成功,会看到:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
-
如果失败(如 Permission denied (publickey)):
- 确认公钥已正确添加到 GitHub。
- 检查 ~/.ssh/config 是否正确。
- 确保 ssh-agent 正在运行且密钥已添加(重复步骤 4)。
-
步骤 6:拉取 GitHub 仓库
-
切换到 SSH URL:
-
在 GitHub 仓库页面,点击 Code 按钮,选择 SSH,复制 URL(例如 git@github.com:username/repo.git)。
-
克隆仓库:
git clone git@github.com:username/repo.git
-