git clone 的时候如何通过 SSH 链接来下载远程项目
2023-10-11
次访问
当我们需要从 github 下载项目的时候,它提供了 2 种下载链接:
1 | https://github.com/ant-design/ant-design.git |
上面 2 种下载链接分别使用了 HTTPS 和 SSH 协议。那么这两种协议有什么区别呢?
- 访问控制:SSH 协议使用公钥和私钥来进行身份验证,因此你需要在远程主机上安装你的公钥。只有拥有私钥的用户才能进行身份验证和访问。相反,HTTPS 协议使用用户名和密码进行身份验证。git clone 或 git fetch 的时候,如果使用 HTTPS 链接则不需要进行身份验证,而 SSH 链接需要。
- 传输速度:SSH 协议在传输数据时进行压缩,因此它可以在传输大量数据时比 HTTPS 更快。此外,SSH 协议通常可以在传输数据时使用更少的带宽,这对于连接速度较慢的网络非常有用。
- 防火墙限制: 某些公司或组织可能会在防火墙中阻止对 SSH 端口的访问,这可能会使 SSH 协议无法使用。另一方面,HTTPS 协议通常可以通过防火墙,因为它使用标准的 Web 端口 80 和 443。
想要通过 SSH 链接来下载项目,需要在客户端和服务器之间配置 SSH key,那么如何做呢?下面以 github 为例来说明具体步骤。
1. 在本地生成 SSH key
1 | ssh-keygen -t ed25519 -C "user@example.com" |
这里我把 user@example.com 替换成了我的 github.com 的邮箱。执行完后可能会有如下提示,不用管直接按回车即可。
1 | Generating public/private ed25519 key pair. |
1 | Enter passphrase (empty for no passphrase): |
最后你会发现会打印这么一串信息:
1 | SHA256:ToTEp33dDV8Sokslnx568DC5ABPQTmvlBjGx+r/W0k8 user@example.com |
然后你就会发现在 .ssh 目录下多了 2 个文件:
1 | ls ~/.ssh |
2. 为你的 github 账户添加一个公共的 key
上面已经在本地生成好了 SSH key,现在就要把这个 key 的内容贴到 github 账户里。
执行如下命令后,会在终端打印 key 的内容,可以选中它们然后复制。
1 | cat ~/.ssh/id_ed25519.pub |
然后按照如下顺序把 key 的内容贴到 github 的账户里。
- Log in to your GitHub account.
- Navigate to “Settings”.
- Click on “SSH and GPG keys” in the left menu.
- Click on the “New SSH key” button.
3. 测试是否可用
接下来就可以找个 github 仓库,复制 SSH 的地址进行 clone 了:
1 | git clone git@github.com:ant-design/ant-design.git --depth=1 |
4. 为 SSH 代理指定 SSH key
如果您不想每次 git 使用 SSH 键时输入密码,则可以将键添加到 SSH 代理管理的键列表中。
1 | eval "$(ssh-agent -s)" |
然后:
1 | ssh-add ~/.ssh/id_ed25519 |
但是每次电脑重启后,如上设置就会失效,需要重新设置。