「踩坑」使用 ssh 同时连接 github 和 coding

原创

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

这里以 github 为主,coding 为次,二者邮箱和用户名不一致。
为方便同时部署 hexo 至多个平台,进行以下操作。

全局默认配置

git config --global user.name '主用户名'
git config --global user.email '主邮箱'

ssh-keygen -t rsa -C "主邮箱"
按提示进行。

-C 后面的信息是为了方便自己辨认。

次要配置

生成副账号 coding 的公钥、密钥,同时指定文件名(方便区分)
ssh-keygen -t rsa -f ~/.ssh/id_rsa.coding -C "副邮箱"

配置文件

最重要的一步

让 github 和 coding 识别不同的公钥、密钥。
在 .ssh 文件夹下面新建 config 文件并配置 config 文件

点击展开
# github
Host *github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

# coding
Host *coding.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa.coding

上传 ssh key

进入 .ssh 文件夹,以文本格式打开 id_rsa.pub ,全选内容并复制,打开 github ssh keys,新建一个公钥。

coding 同理,登录后打开 个人账户设置 - SSH公钥 ,这里添加的公钥为 id_rsa.coding

测试 ssh 连接

  • ssh -T git@github.com
成功示例
Hi (你的github用户名)! You've successfully authenticated, but GitHub does not provide shell access.
  • ssh -T git@e.coding.net
成功示例
CODING 提示: Hello (用户名), You've connected to coding.net via SSH. This is a Personal Key.
(用户名),你好,你已经通过 SSH 协议认证 coding.net 服务,这是一个个人公钥.
公钥指纹:xxxxx…

一切检查妥当之后,可将 .ssh 文件夹压缩加密,转移同步设备时直接解压至相应目录,无需重新配置。

⚠⚠⚠ 踩坑

  • 操作和配置填写检查不出错误,可副账号 coding 总是验证失败……
    最终发现是 config 文件的权限有问题(万恶的 system read-only),使用 mt 管理器将其设置为 “三读一写三执行 755”
点击展开

mt 管理器

重新 ssh -T git@e.coding.net 即可验证成功。

  • git 连接总是需要密码验证
    如果上面的 ssh 验证成功,可 git fetchgit clone仍然要求输入账号密码
    这是由于前面添加远程地址的时候不小心使用了 https 链接,它是不走 ssh 验证的。
    运行 git remote -v 可见 https 标头
origin  https://github.com/xxx/xxx.git (fetch)
origin https://github.com/xxx/xxx.git (push)

解决方法:重新设置远程地址,从 https 切换到 ssh ,使用下面的格式
git remote set-url origin git@github.com:用户名/仓库名.git

至此应该没问题了。

本文作者:青菜芋子

本文链接: https://loafing.cn/posts/ssh-github-coding.html

文章默认采用 CC BY-NC-SA 4.0 许可协议,如有转载请注意遵循。

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。