如果使用 http 协议,每次提交或拉取等与服务器交互时都要输入密码,感觉很麻烦。于是决定使用 SSH 协议,因为自己使用的是 github ,公司使用的是 gitlab,所以要用到多 git 账户的 SSH 配置。看了很多文档写的不是很详细,下面详细说一下重要步骤!(以下在 Mac 系统中进行测试)
如果已经有,考虑到不是最新的,可以删除掉重新配置下。
1、打开终端,输入 ls -al ~/.ssh
wangtwothree@WangTwoThrees-Mac-mini-2 .ssh % ls -al ~/.ssh
total 56
drwxrwxrwx 9 wangtwothree staff 288 Dec 3 21:59 .
drwxr-x---+ 86 wangtwothree staff 2752 Dec 8 00:10 ..
-rw-r--r-- 1 wangtwothree staff 341 Sep 13 22:45 config
-rw-r--r-- 1 wangtwothree staff 2602 Sep 13 22:34 gitee_rd_rsa
-rw-r--r-- 1 wangtwothree staff 570 Sep 13 22:34 gitee_rd_rsa.pub
-rw-r--r-- 1 wangtwothree staff 2610 Sep 13 22:34 github_rd_rsa
-rw-r--r-- 1 wangtwothree staff 574 Sep 13 22:34 github_rd_rsa.pub
-rw------- 1 wangtwothree staff 919 Dec 3 21:59 known_hosts
-rw-r--r-- 1 wangtwothree staff 183 Dec 3 21:53 known_hosts.old
2、检查目录列表,看看是否已经拥有公共 SSH 密钥。如果您没有现有的公钥和私钥对,则直接生成;有的话删除公钥和私钥对,重新生成。
1、打开终端,输入 ssh-keygen -t ed25519 -C "your_email@example.com"
,不支持 Ed25519 算法的遗留系统则输入 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
wangtwothree@WangTwoThrees-Mac-mini-2 .ssh % ssh-keygen -t ed25519 -C "xxx@qq.com"
Generating public/private ed25519 key pair.
2、看到上边这句话就已经开始生成,按照提示输入文件存储位置,一般在 /Users/xxx/.ssh/
目录下。输入秘钥密码,输入后回车,也可直接回车跳过密码。
3、如果看到 The key's randomart image is:
说明秘钥已经生成成功。
1、在后台启动 ssh-agent,输入eval "$(ssh-agent -s)"
wangtwothree@WangTwoThrees-Mac-mini-2 .ssh % eval "$(ssh-agent -s)"
Agent pid 60218
2、配置多个 SSH 账户
在 macOS Sierra 10.12.2 以上需要修改~/.ssh/config
文件。
输入vi ~/.ssh/config
3、config 文件添加内容。如果在生成密钥时输入了密码则将 IgnoreUnknown UseKeychain
替换为 UseKeychain yes
。
Host github.com
AddKeysToAgent yes
IgnoreUnknown UseKeychain
IdentityFile ~/.ssh/rsa_github
4、将 SSH 私钥添加到 ssh 代理中,并将密码存储在钥匙串中。
输入 ssh-add -K ~/.ssh/rsa_gitlab
。
1、拷贝公钥文件里的内容,输入 pbcopy < ~/.ssh/rsa_gitlab.pub
,在账户设置 SSH 配置中添加拷贝的内容,标题可以设置为电脑型号或名称。
2、测试连接是否正常,如果不正常请按步骤排查。输入 ssh -T git@github.com
。此时会让你输入yes或no是否继续连接,输入 yes
即可。如果看到以下输出就成功了。
Hi WangTwoThree! You've successfully authenticated, but GitHub does not provide shell access.
gitlab 私有 git
Warning: Permanently added '36.99.**.**' (ECDSA) to the list of known hosts.
Welcome to GitLab, WangTwoThree!
最终 config 文件内容为:
Host github.com
AddKeysToAgent yes
IgnoreUnknown UseKeychain
IdentityFile ~/.ssh/rsa_github
Host 36.99.**.**
AddKeysToAgent yes
# Port 8888
IgnoreUnknown UseKeychain
IdentityFile ~/.ssh/rsa_gitlab
如果你在使用 Git over SSH 时仍然需要输入用户名,可能有几个原因:
1、未使用 SSH URL:
确保你使用的是 SSH URL 而不是 HTTPS URL。
SSH URL 通常以 git@hostname:username/repo.git 的形式呈现。
如果使用 HTTPS URL,即使设置了 SSH 密钥,系统也可能要求输入用户名和密码。
你可以通过以下命令检查远程 URL:
git remote -v
如果显示的是 HTTPS URL,你可以使用以下命令切换为 SSH URL:
git remote set-url origin git@hostname:username/repo.git
其中,hostname 是远程 Git 服务器的主机名,username 是你的用户名,repo.git 是仓库的名称。
2、SSH 配置问题: 检查你的 SSH 配置。
在 ~/.ssh/config
文件中,确保没有配置项覆盖了用户名。如果存在这样的配置项,请删除或修改为正确的用户名。
3、SSH 密钥关联问题:
确保你的 SSH 密钥正确关联到 Git 服务商的帐户。在 GitHub 或其他 Git 服务商的用户设置中,查看是否添加了正确的 SSH 公钥。
4、缓存凭据问题:
如果之前使用了用户名和密码进行 HTTPS 认证,Git 可能仍然记住了这些凭据。你可以清除 Git 的凭据缓存:
git credential-cache exit
或者,你可以使用以下命令清除全局的 Git 凭据:
git credential-cache exit
确保上述步骤中的每一项都正确设置,然后尝试再次进行 Git 操作。