在进行 Git 操作时,如git clone ssh://{url} 如果未正确指定 SSH 用户名,可能会出现如下报错:
mac@{url}: Permission denied (publickey)
这是因为 SSH 默认用户名与 iCode 上绑定的 SSH Key 信息不匹配导致的。本文将说明原因并给出解决方案。
我们在git clone的时候使用的url有两种,每种的SSH匹配原理都是不一样的:
Git 服务使用“反向匹配 SSH Key”的方式
- 即你上传到 iCode 的公钥会绑定到你的 iCode 账号。
- 当你以 `git@{url}` 访问仓库时,
- 会根据你当前使用的 ****私钥**** 匹配到你是谁,而不是根据 `git` 这个用户名。
由于 没有写用户名,SSH 默认会采用本机当前系统用户名(例如 mac)进行连接,于是连接地址变成mac@{url},系统中没有 mac 这个用户,也没有绑定任何公钥,因此会报错,
回到上面的问题,在使用ssh://{url} 的情况下如何解决问题?
在.ssh下创建config文件,写入以下内容
Host {url} // 你需要clone代码库的url
User {user} // 指定要clone代码库url绑定SSH KEY的user
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
dentityFile ~/.ssh/id_rsa