SSH
ssh
SSH
TIP
ssh: connect to host github.com port 22: Connection refused 意味着你的 SSH 客户端无法通过默认的 SSH 端口(22端口)连接到 GitHub。这个问题可能是由以下几种原因引起的,比如网络限制、防火墙设置或者 SSH 配置问题。
1. 检查网络限制
有些网络(如公司网络或公共 Wi-Fi)可能会屏蔽 22 端口的 SSH 连接。如果你处于这样的网络环境下,可以尝试使用 GitHub 的 SSH 端口 443(通常用于 HTTPS 流量)。这样可以绕过网络上的端口限制。
使用 GitHub 的 SSH 端口 443(HTTPS 端口)
GitHub 支持通过 443 端口进行 SSH 连接,可以避免端口 22 被屏蔽。
1.编辑 SSH 配置文件:
打开 SSH 配置文件(如果没有,可以创建它):
nano ~/.ssh/config
2.添加以下配置:
Host github.com
HostName ssh.github.com
User git
Port 443
3.保存文件后,重新连接 GitHub:
ssh -T git@github.com
这样,SSH 会通过端口 443 连接 GitHub,从而避开了端口 22 的限制。
Details
2. 检查防火墙设置
如果你没有网络限制的问题,可能是本地防火墙或安全设置导致无法连接到 GitHub。 检查端口 22 是否被阻塞 你可以尝试运行以下命令,看看能否通过端口 22 连接到 GitHub:
telnet github.com 22
如果显示连接错误,表示端口 22 被阻塞。 如果连接成功,表示你的 SSH 配置或密钥可能有问题。
检查本地防火墙设置
如果你在本地启用了防火墙(如 ufw 或 iptables),确保允许出站的 22 端口连接:
sudo ufw allow 22
3. 测试与 GitHub 的 SSH 连接
如果你已经修改了 SSH 配置,尝试测试一下与 GitHub 的 SSH 连接:
ssh -T git@github.com
如果连接成功,你会看到类似下面的提示:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
4. 使用 HTTPS 作为备选
如果 SSH 连接仍然有问题,你可以切换到 HTTPS,这样就避免了使用 SSH。
修改远程仓库的 URL 为 HTTPS:
查看当前的远程仓库 URL:
git remote -v
如果 URL 是 SSH 形式(例如 git@github.com:username/repository.git),你可以将它改为 HTTPS:
git remote set-url origin https://github.com/username/repository.git
使用 HTTPS 进行推送或拉取:
修改 URL 后,你可以使用 HTTPS 来推送或拉取代码:
git push origin main
当提示输入用户名和密码时,输入 GitHub 用户名 和 个人访问令牌(PAT)(因为 GitHub 已经不再支持密码认证)。
5. 检查 SSH 密钥
有时,问题也可能与 SSH 密钥配置有关。确保你的 SSH 密钥已经正确添加到 GitHub。
检查是否有 SSH 密钥:
查看本地是否已有 SSH 密钥:
ls ~/.ssh
如果你看到 id_rsa(RSA 密钥)或 id_ed25519(Ed25519 密钥),说明你的机器上已有 SSH 密钥。
将 SSH 密钥添加到 GitHub: 如果你没有 SSH 密钥,或者密钥没有添加到 GitHub 上,你可以生成并添加它:
生成一个 SSH 密钥(如果没有的话):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
添加密钥到 SSH 代理:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
复制公钥并添加到 GitHub 的 SSH 和 GPG 密钥 设置中:
cat ~/.ssh/id_rsa.pub
复制输出内容并添加到 GitHub 设置中的 SSH 和 GPG 密钥 页面。
测试 SSH 连接:
ssh -T git@github.com
6. 重新安装 SSH 客户端(可选)
如果以上方法都没有解决问题,可能是你的 SSH 客户端存在问题。你可以尝试重新安装 OpenSSH 客户端。
在 Ubuntu/Debian 上:
sudo apt-get install --reinstall openssh-client
在 macOS 上(OpenSSH 默认已安装,但你可以通过 Homebrew 重装):
brew install openssh