配置 GitHub SSH

制作 GitHub Actions 并发布到市场需要开启 GitHub 的两步验证。开启两验证后就需要配置 SSH 方式进行仓库的提交,因为不能使用密码了,要么使用 personal token。

根据官方文档进行 SSH 配置。

检查本地 SSH keys

通过命令 ls -al ~/.ssh 查看本地是否已经存在 SSH key。

$ ls -al ~/.ssh
...
id_rsa.pub
id_ecdsa.pub
id_ed25519.pub
...

如果已经存在,则会出现上述三个文件。

如果不存在,则需要进行生成。

生成 SSH key

$ ssh-keygen -t ed25519 -C "your_email@example.com"

执行上述命令一路回车即可。

添加 SSH key 到 ssh-agent

首先是启动 ssh-agent:

$ eval "$(ssh-agent -s)"

讲道理,这个 agent 需要常驻后台,新开 terminal 或重启时,都需要开启该服务。fish shell 可添加如下脚本到配置文件(~/.config/fish/config.fish)以达到自动启动的目的:

fish shell 自动启动 ssh-agent 的脚本
# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ]
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else
        start_agent
    end
end

上述来自 ssh_agent_start.fish

配置 SSH 自动添加 key 到 agent

编辑文件 ~/.ssh/config 输入如下内容,如果文件不存在则创建一个:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

添加本地私钥到 agent

$ ssh-add -K ~/.ssh/id_ed25519

至此本地 SSH 配置完成。接下来配置 GitHub。

添加 SSH key 到 GitHub

首先复制本地公钥:

$ pbcopy < ~/.ssh/id_rsa.pub

打开 GitHub 设置页定位到 SSH and GPG keys 页面,选择 New SSH Key 然后输入上面复制的内容,取个标题后保存。

由此完成了 SSH 的配置。

大概需要重启一下 terminal 以生效。

切换仓库到 SSH 方式

将之前通过 HTTPS 克隆的仓库切到 SSH 方式:

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

hub

另,还可配置 hub 使用 SSH 进行克隆。

$ git config --global hub.protocol ssh

相关资源