mac系统升级导致ssh多账号免密登录失效问题

3,823 阅读3分钟

日常在公司需要的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"

ssh登录步骤(一).png

建立配置文件

使用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

image.png 添加成功后,进行测试。多个账号同理设置。

❯ ssh -T git@github.com