配置多个Git账户在HTTPS端口使用SSH连接Github


kex_exchange_identification: Connection closed by remote host 问题解决方案

造成的原因

https://github.com/vernesong/OpenClash/issues/1960

代理的节点服务商为了防止滥用把 22 出口端口屏蔽了。

解决方法:

  1. 关闭代理软件
  2. 或者修改代理软件转发配置,不代理22端口
  3. 在HTTPS端口使用SSH连接

前两种方法会造成clone不经过代理,下载非常慢。

第三种方法实测即使不启用代理,使用443端口clone也比22端口更快。

在 HTTPS 端口使用 SSH 连接

要测试是否可以通过 HTTPS 端口进行 SSH,请运行以下 SSH 命令:

$ ssh -T -p 443 git@ssh.github.com
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

看到这个输出时,代表可以通过 HTTPS 端口进行 SSH 连接。

SSH 协议规则:

[协议]://[用户名]@[主机名]:[端口号]

示例:使用 443 端口 clone 库

git clone ssh://git@ssh.github.com:443/<YOUR-USERNAME>/<REPOSITORY>.git

将 443 端口改为全局设置

覆盖您的 SSH 设置以强制任何与 gitHub.com 的连接通过 ssh.github.com 服务器和 443 端口运行。

要设置 SSH 配置文件,请编辑 ~/.ssh/config 文件,并添加以下部分:

Host github.com
  Hostname ssh.github.com
  Port 443
  User git

配置多组秘钥对

用于在一台电脑登录多个 gitHub 账号。

~/.ssh/config 有如下内容:test 为第二个 github 账号

# 默认 git@github.com 通过 443
Host github.com
    Hostname ssh.github.com
    Port 443
    User git
#   IdentityFile ~/.ssh/id_rsa # 可指定私钥,不填则使用默认私钥

# 示例:为 test 账号单独设置 443
Host test
    HostName ssh.github.com
    User git
    Port 443
    IdentityFile ~/.ssh/id_test # 指定为 test 账号上传到 github 的公钥匹配的私钥

测试 test 账号是否正常:

ssh -T test

配置其它 git 仓库账号时同理。

SSH 配置项说明

Host example                       # 关键词
    HostName example.com           # 主机地址
    User root                      # 用户名
#   IdentityFile ~/.ssh/id_rsa     # 认证文件
#   Port 22                        # 指定端口

Host
用于我们执行 SSH 命令的时候如何匹配到该配置。

  • *,匹配所有主机名。
  • *.example.com,匹配以 .example.com 结尾。
  • !*.dialup.example.com,*.example.com,以 ! 开头是排除的意思。
  • 192.168.0.?,匹配 192.168.0.[0-9] 的 IP。

IdentityFile
指定读取的认证文件路径,允许 DSA,ECDSA,Ed25519 或 RSA。值可以直接指定也可以用一下参数代替:

  • %d,本地用户目录 ~
  • %u,本地用户
  • %l,本地主机名
  • %h,远程主机名
  • %r,远程用户名

Port
指定连接远程主机的哪个端口,22(default)。

User
登录用户名

ProxyCommand
指定连接的服务器需要执行的命令。%h,%p,%r

如:ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

关键词登录

为了更方便的登录服务器,我们也可以省略用户名和主机名,采用关键词登录。那么你需要添加如下配置到 ~/.ssh/config

Host deepzz                        # 别名
    HostName deepzz.com            # 主机地址
    User root                      # 用户名
    # IdentityFile ~/.ssh/id_ecdsa # 认证文件
    # Port 22                      # 指定端口

那么使用 $ ssh deepzz 就可以直接登录服务器了。

代理登录

有的时候你可能没法直接登录到某台服务器,而需要使用一台中间服务器进行中转,如公司内网服务器。首先确保你已经为服务器配置了公钥访问,并开启了agent forwarding,那么你需要添加如下配置到 ~/.ssh/config

Host gateway
    HostName proxy.example.com
    User root
Host db
    HostName db.internal.example.com                  # 目标服务器地址
    User root                                         # 用户名
    # IdentityFile ~/.ssh/id_ecdsa                    # 认证文件
    ProxyCommand ssh gateway netcat -q 600 %h %p      # 代理命令

那么你现在可以使用 $ ssh db 连接了。

参考链接:https://deepzz.com/post/how-to-setup-ssh-config.html


文章作者: iKnow
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iKnow !
  目录