Mac上Git多账户SSH配置

#编程技术 2023-12-08 14:01:00 | 全文 1444 字,阅读约需 3 分钟 | 加载中... 次浏览

👋 相关阅读


如果使用 http 协议,每次提交或拉取等与服务器交互时都要输入密码,感觉很麻烦。于是决定使用 SSH 协议,因为自己使用的是 github ,公司使用的是 gitlab,所以要用到多 git 账户的 SSH 配置。看了很多文档写的不是很详细,下面详细说一下重要步骤!(以下在 Mac 系统中进行测试)

一、检测已有 SSH

如果已经有,考虑到不是最新的,可以删除掉重新配置下。

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 密钥。如果您没有现有的公钥和私钥对,则直接生成;有的话删除公钥和私钥对,重新生成。

二、生成一个新的 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: 说明秘钥已经生成成功。

三、将生成的秘钥添加到 ssh 代理中

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

四、将秘钥的公钥添加到 github 等 git 服务器中

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 密钥,为什么还需要输入用户名

如果你在使用 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 操作。

VIA

Edit | Last updated on 2024-07-04 10:07:59




×