坑:ssh: connect to host github.com port 22: Connection refused
根据错误提示 ssh: connect to host github.com port 22: Connection timed out
,主要是由于无法连接到 GitHub 的 SSH 服务(默认使用端口 22)。以下是详细的排查与解决方法:
1. 测试使用端口 443 连接 GitHub
提示
我用此方式解决了问题,如果你也遇到类似的问题,可以尝试一下。
如果 22 端口被阻止,可以尝试通过 SSH 的 443 端口连接:
修改 SSH 配置:
bashnotepad ~/.ssh/config
如果文件不存在,可以新建一个。内容如下:
Host github.com Hostname ssh.github.com Port 443 User git
保存文件。
确保 SSH 配置文件的权限正确(可选): 在命令行中运行:
bashchmod 600 ~/.ssh/config
测试连接:
bashssh -T git@github.com
如果配置正确,应该会显示类似以下输出:
plaintextHi username! You've successfully authenticated, but GitHub does not provide shell access.
2. 切换到 HTTPS 方式推送代码
如果问题依旧,切换到 HTTPS 方式代替 SSH 推送代码:
获取 HTTPS 仓库地址: 在 GitHub 仓库页面,点击 Code > HTTPS,复制地址(例如
https://github.com/username/repository.git
)。替换远程地址:
bashgit remote set-url origin https://github.com/username/repository.git
尝试推送:
bashgit push
系统会提示输入 GitHub 用户名和密码(或令牌)。
3. 测试网络连接
确保你的网络能够访问 GitHub:
测试是否能通过 HTTP 访问 GitHub:
bashcurl https://github.com
应该返回 GitHub 的页面内容。
测试是否能通过 HTTPS 访问 GitHub 的 SSH 服务:
bashtelnet ssh.github.com 443
如果能连接上,说明 443 端口可用,可以继续使用方法 1。
如果仍然无法连接,尝试切换到其他网络(例如手机热点)。
4. 检查系统防火墙与代理设置
确认系统防火墙是否限制了 SSH:
- 在 Windows 上,打开 控制面板 > 系统和安全 > Windows 防火墙。
- 确保
ssh
程序没有被防火墙阻止。
如果你的网络环境中存在代理或 VPN,请暂时关闭后重试。
5. 重试 SSH 公钥配置
确保你的 SSH 公钥已正确添加到 GitHub:
查看本地公钥:
bashcat ~/.ssh/id_rsa.pub
如果没有,生成一个新的 SSH 密钥对:
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将公钥复制到 GitHub:
- 登录 GitHub。
- 点击 Settings > SSH and GPG keys > New SSH key。
- 粘贴公钥并保存。
测试连接:
bashssh -T git@github.com
6. 联系网络管理员
如果你在公司或学校网络环境中,可能存在网络限制。联系网络管理员,确认 22 和 443 端口是否被阻止。
通过上述步骤,你应该能够解决问题。如果还有疑问,请告诉我具体步骤中遇到的反馈信息。