新建了一个仓库,想要执行`git push -u origin main`时,出现此错误。
排查:
1. ping
ping github.com时,没有反应,超时。
(要么时github的问题,要么就是我的机器连不上。)
2. 检查github网站状态
访问GitHub Status,显示“All Systems Operational”。
(github没问题,机器的问题。)
处理:
在网上找了找处理方法,一半是用代理,一半是改host。
因为我是在服务器上,不知道怎么弄代理,就选择改host。
方法参照:
github 访问ping不通的解决办法-腾讯云开发者社区-腾讯云 (tencent.com)
(大恩大德,没齿难忘)
另注:
多数改host的方法说的时自己查github的ip,但是我这边查出来的ip(20.205.243.166),在/etc/hosts中添加了以下内容后仍然无效,使用链接中的内容是可行的(2024/1/20)。
20.205.243.166 github.com20.205.243.166 github.com
Github连接(https/ssh):
按照上述方法处理后,不会再显示Failed to connect to github.com port 443: Connection timed out。
但是当使用https来push时,会报错:
gnutls_handshake() failed: The TLS connection was non-properly terminated.
使用ssh来push时,会报错:
git@github.com: Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.
处理:
最终采用ssh,需要配置ssh访问权限。
其实我配置过,但是似乎因为不止我一个人在使用,所以从服务器连接github时,不是用的我配置的ssh。
通过询问ChatGPT,最终通过配置 ~/.ssh/config 来解决:
如果在服务器上有多个人通过 SSH 连接到 GitHub,你可以为每个用户配置单独的 SSH 密钥。每个用户都可以拥有自己的 SSH 密钥对,并将公钥添加到他们 GitHub 帐户中。
以下是基本的步骤:
为每个用户生成 SSH 密钥对:
1. 在服务器上,每个用户都执行以下命令生成 SSH 密钥对。确保他们输入自己的电子邮件地址。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将生成 `id_rsa`(私钥)和 `id_rsa.pub`(公钥)文件。
2. 将每个用户的公钥(`id_rsa.pub` 文件的内容)添加到他们 GitHub 帐户的 SSH 密钥中。
- 用户可以使用以下命令查看公钥内容:
cat ~/.ssh/id_rsa.pub
- 复制输出,然后将其添加到 [GitHub SSH 密钥设置页面]。
在服务器上设置 SSH 配置:
1. 在服务器上,你可以在每个用户的 `~/.ssh/config` 文件中设置 GitHub 相关的配置。如果该文件不存在,可以创建它。
touch ~/.ssh/config
2. 编辑 `~/.ssh/config` 文件并添加以下内容,替换 `<username>` 为实际的 GitHub 用户名:
Host github.com-<username> HostName github.com User git IdentityFile ~/.ssh/id_rsa
你可以复制这个块并为每个用户更改 `<username>`。
使用 SSH URL 克隆和推送:
现在,每个用户都可以使用他们的 SSH 密钥对通过 SSH 连接到 GitHub。在他们克隆或推送仓库时,他们可以使用 SSH URL:
git clone git@github.com-<username>:username/repo.git
或者在已有的仓库中设置远程 URL:
git remote set-url origin git@github.com-<username>:username/repo.git
这样就可以为每个用户配置独立的 SSH 密钥对,并确保他们之间不会发生冲突。