修改 SSH 配置,使用 443 端口

  1. 在你的 ~/.ssh/config 文件中(如果没有就创建一个),添加下面的配置:

    Host github.com
    HostName ssh.github.com
    Port 443
    IdentityFile ~/.ssh/id_rsa

    这样一来,当你连接 GitHub 时,会通过 443 端口(通常不会被防火墙屏蔽或被 clash 拦截)进行连接。

  2. 确保 Hexo 部署配置中使用的是类似 git@github.com:username/repo.git 的地址。SSH 配置生效后,就能自动使用 443 端口进行连接。

如何测试

你可以通过 SSH 命令来测试连接是否正常。具体步骤如下:

  1. 测试默认配置:
    打开终端,输入以下命令:

    ssh -T git@github.com

    如果配置正确,你通常会看到类似如下提示:

    Hi <你的用户名>! You've successfully authenticated, but GitHub does not provide shell access.

    如果第一次连接会提示确认主机的指纹,输入 “yes” 即可。

  2. 查看详细信息(可选):
    如果你希望看到更多调试信息,可以加上 -v 参数:

    ssh -vT git@github.com

    这会显示连接过程中的详细日志,帮助你确认是否走了443端口以及配置是否生效。

  3. 直接测试443端口(可选):
    如果你想明确测试使用443端口连接,可以运行:

    ssh -T -p 443 git@ssh.github.com

    成功后同样会显示 GitHub 的欢迎信息。

总结

整个过程主要涉及以下几个知识点和处理逻辑:

  1. SSH 协议和身份验证机制

    • SSH 协议:SSH(Secure Shell)用于在不安全的网络环境中安全地连接到远程服务器。它采用公钥加密技术进行身份验证和数据传输。
    • 身份验证:客户端利用私钥与服务器对应的公钥进行认证,从而确认双方的身份。GitHub 会验证你提供的 SSH 密钥是否与账户中登记的公钥一致。
  2. SSH 配置文件 (~/.ssh/config)

    • 配置文件语法:通过在配置文件中指定 Host、HostName、Port、IdentityFile 等参数,可以定制化连接行为。
    • 端口和主机名重定向:当默认的 22 端口因防火墙或代理问题不可用时,可以在配置文件中指定使用 GitHub 提供的 ssh.github.com 和 443 端口。这样就能绕过网络限制,保证连接正常。
  3. 主机密钥验证 (known_hosts)

    • 首次连接确认:当首次连接到一个服务器时,SSH 客户端会获取服务器的公钥指纹,并要求用户确认,以防中间人攻击。确认后,这个指纹会保存到 known_hosts 文件中,后续连接时自动信任该服务器。
    • 安全机制:这一机制确保你连接的是预期的服务器,而不是被篡改的目标。
  4. 网络和代理知识

    • 端口问题:在某些网络环境下,22 端口可能会被限制或代理处理,导致连接失败。通过改用 443 端口(通常用于 HTTPS 流量),可以绕过这些限制。
    • 代理与直连:在使用如 Clash 的代理工具时,可能会影响 SSH 的默认连接行为。通过手动配置 SSH 使用特定端口,可以让连接走直连通道,从而不受代理影响。

处理逻辑总结:

  1. 读取 SSH 配置
    SSH 客户端首先查找 ~/.ssh/config 中匹配 github.com 的配置,根据配置使用 ssh.github.com 作为主机名,并指定端口为 443。

  2. 建立连接与验证主机密钥
    客户端向指定地址发起连接,并接收到服务器的公钥指纹。由于这是首次连接,会提示你确认该指纹,确认后写入 known_hosts 文件中。

  3. 密钥交换与身份验证
    连接建立后,SSH 客户端使用配置中指定的私钥进行身份验证,GitHub 验证密钥后允许连接。

  4. 连接成功提示
    由于 GitHub 不提供真正的 shell 访问,成功验证后只会返回一条欢迎信息,说明认证和连接都正常。