日常在公司需要的git账号是内网的gitlab的,还有平时自己在github和gitee都是不同的账号,全局git账户只能有一个,不方便管理。每次在不同的站点切换都需要重新设置git账号才能使用SSH免密登录的能力,这时候就需要使用git多账号管理了。
macOS Ventura更新
此次更新主要是升级了mac系统,导致原来的rsa加密的方式失效了,macOS Ventura 内置使用了 OpenSSH_9.0p1,根据 OpenSSH 发行说明 可以得知,从 OpenSSH 8.8/8.8p1 版本开始,就默认关闭了 ssh-rsa 算法。那么 macOS Ventura 内置使用的 OpenSSH_9.0p1 也是默认关闭了 ssh-rsa 算法。
启用单个主机或者地址:(如果不懂 Host xxx-host 的含义,建议使用启用全部场景)
# 在 ~/.ssh/config 文件的对应主机配置里新增2行:
Host xxx-host
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
复制代码
默认全部场景都启用:
# 配置里有 Host * 配置的,需要写到 Host * 内
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
# 没有的,在 ~/.ssh/config 文件的顶部插入或者尾部新增2行:
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
但是这种行为是不安全的,建议升级为官方推荐的三种算法的密钥:
- rsa-sha2-256/512.
since 7.2
- ssh-ed25519
since 6.5
- ecdsa-sha2-nistp256/384/521.
since 5.2
生成SSH公私钥
在终端(windows下打开git bash的窗口)输入以下命令,进入.ssh的目录,这里是存放公私钥和配置文件的地方:
cd ~/.ssh
使用你登录github\gitlab\gitee的账号来生成对应的ssh公私钥。 切记这一步不要一直回车,第一个问题是问你想要把公私钥文件放在哪里,默认的文件名是id_ed25519,因为是多账号配置,比如在配置github账号,我们就使用id_ed25519_github来命名,也可以自行取名,自己清楚就好。后面是指定秘钥的加密密码,查看秘钥需要输入密码,确保在私钥丢失时也无法被窃取,可以为空。
ssh-keygen -t ed25519 -C "liaowenrun@gmail.com"
建立配置文件
使用ls查看.ssh目录下是否有config文件存在,否则创建一个。
touch config
.ssh/config
文件是 SSH 客户端的配置文件,它可以用来配置 SSH 客户端的各种参数。下面是对于这个配置文件中的参数的解释:
Host
: 指定配置的主机名,可以是主机名或 IP 地址。Hostname
: 指定连接远程主机的主机名或 IP 地址。Port
: 指定连接远程主机的 SSH 服务的端口号。User
: 指定连接远程主机所使用的用户名。IdentityFile
: 指定使用的身份验证文件的路径。PreferredAuthentications
: 指定身份验证方法,这里设置为 publickey,即使用公钥进行身份验证。
Host github.com
Hostname ssh.github.com
Port 443
User XXX
IdentityFile ~/.ssh/id_ed25519_github
PreferredAuthentications publickey
其中,Host
是必需的,其他参数则可以根据需要添加,这些参数可以在连接不同的主机时使用不同的配置。
可以使用 man ssh_config
命令来查看更多的配置参数和说明。
在这里指定连接远程主机的主机名为 ssh.github.com,这是因为 GitHub 使用了一个不同的域名来处理 SSH 连接。
指定连接的 SSH 服务端口为 443,这是因为有些网络环境下可能会禁止默认的 SSH 端口 22,而 GitHub 支持在 443 端口上进行 SSH 连接。
复制公钥进行远程配置
复制公钥文件内的内容,登录到github找到设置中的ssh进行添加。
cat id_ed25519_github.pub | pbcopy
添加成功后,进行测试。多个账号同理设置。
❯ ssh -T git@github.com