SSH端口22拒绝连接

问题描述

1
2
3
ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

原因分析

此错误通常意味着:

  1. SSH服务(22端口)在目标服务器上未开启或不可达 -> 但GitHub的SSH服务是正常的,所以问题通常出在本地环境或网络
  2. 网络(如公司网络、校园网、某些公共Wi-Fi)屏蔽了SSH协议(22端口)
  3. 您的SSH密钥配置有误,或远程仓库地址配置错误。

进行测试

诊断网络连通性

在终端(Terminal)或命令提示符(CMD)中运行以下命令,检查您的网络是否能访问GitHub的SSH端口。

  1. 测试是否能连接到 github.com 的 22 端口
1
ssh -T git@github.com -p 22

结果

1
The authenticity of host 'ssh.github.com (20.205.243.160)' can't be established.
  1. 测试是否能连接到 github.com 的 443 端口
1
ssh -T git@github.com -p 443

结果

1
Hi Winward-King! You've successfully authenticated, but GitHub does not provide shell access.
  1. 如果是长时间未连接仓库或重新更新测试SSH密钥后,会进行 GitHub 的公钥指纹匹配

测试 SSH 连接 - GitHub 文档

1
2
3
4
5
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This host key is known by the following other names/addresses:
C:\Users\你的用户名/.ssh/known_hosts:1: [ssh.github.com]:443
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ssh.github.com' (ED25519) to the list of known hosts.

这是一个 SSH 连接过程中的标准安全验证提示,而非错误。它表明您的计算机首次尝试通过 443 端口连接到 ssh.github.com,因此无法自动验证该服务器的真实性。这是一项防止“中间人攻击”的关键安全机制。

GitHub 的公钥指纹匹配

  1. 核心安全要求:在系统询问 Are you sure you want to continue connecting (yes/no/[fingerprint])?时,切勿直接输入 yes。您必须先核对屏幕上显示的指纹是否与官方公布的指纹一致。
  2. 如何安全验证
    • 核对指纹:屏幕显示的指纹是 SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU。您需要将此指纹与 GitHub 官方公布的 SSH 密钥指纹 进行比对。
    • 查找官方指纹:请访问 GitHub 官方文档(例如,在 docs.github.com上搜索 “GitHub’s SSH key fingerprints”),找到其公布的 ssh.github.com或相关服务的 ED25519密钥指纹。
  3. 验证后的操作
    • 如果指纹完全一致:这证明您连接的是真实的 GitHub 服务器。请输入 yes并按回车确认。
      • 后续影响:此主机的密钥将被保存到您本地计算机的 ~/.ssh/known_hosts文件中,此后连接将不再提示,除非服务器密钥变更。
    • 如果指纹不一致请务必输入 no并终止连接。这可能存在安全风险,请检查网络环境并重新从官方渠道获取正确信息。

解决方案

方案一:配置SSH通过HTTPS端口(443)连接(一劳永逸)

GitHub提供了一个备用SSH端口,通过443端口的HTTPS隧道来传输SSH数据,可以绕过对22端口的封锁。

  1. 编辑或创建SSH客户端配置文件 ~/.ssh/config

    ssh文件夹中新建一个config文件

    1
    touch config
  2. 添加以下配置:

    请确保路径指向您实际的私钥文件

    1
    2
    3
    4
    5
    6
    7
    Host github.com
    Hostname ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_rsa
    TCPKeepAlive yes
    IdentitiesOnly yes
  3. 保存文件后,再次运行连接测试:

    1
    ssh -T git@github.com

Git密钥失效或更新

重新生成提交ssh密钥

1 由C:\Users\你的用户名\.ssh找到.ssh文件夹,删除该文件夹下所有文件

2 查看git全局配置是否正确 在任意位置git bash

1
git config --list

如果不正确,通过以下命令修改邮箱或用户名

1
2
3
4
修改用户名
git config --global user.name 'xxxx'
修改邮箱
git config --global user.email 'xxxxxx@gmail.com'

3 修改本地ssh

1
ssh-keygen -t rsa -C "xxxxx@gmail.com"

一路回车,遇到y/n 键入y

4 打开C:\Users\你的用户名\.ssh\id_rsa.pub 复制该文件中的密钥内容

5 进入github,在settings中找到SSH and GPG keys

6 删除旧的ssh密钥,加入新的ssh密钥(new ssh key)

Bad owner or permissions

问题描述

1
Bad owner or permissions on */.ssh/config

原因分析

出现此问题的原因是VSCode为此文件中包含未知用户权限导致的。

常常出现在不同操作系统中访问系统文件留下的权限。

解决方案

右击选择“属性”->“安全”后,可以在“组或用户名”中看出多了一个未知用户(S-1-5开头的那个),只要将该用户删除即可。

- [ssh秘钥失效解决办法 - bradinz - 博客园](https://www.cnblogs.com/zbohan/articles/18871740) - [VSCode使用remote-ssh连接远程失败提示“Bad owner or permissions on */.ssh/config”问题的解决方法 - 竿钓蝉 - 博客园](https://www.cnblogs.com/gandiaochan/p/17074791.html)