【SSH连接与权限问题】ssh: connect to host github.com port 22: Connection refused Bad permissions. Try removin
如何在vscode上连接GitHub?
1.使用 HTTPS(需密码或令牌)
通过git clone https://github.com/用户名/仓库名.git 后输入github密码或令牌即可。
2.使用 SSH(推荐,免密操作)
什么是SSH?
SSH 就像一把安全的数字钥匙,让 VSCode 和 GitHub 能互相信任地传输代码,既防偷窥又省去输密码的麻烦。
(1)生成SSH密钥:在本地电脑创建一对密钥(公钥+私钥)
-
公钥 → 上传到 GitHub(相当于把锁交给 GitHub)
-
私钥 → 留在自己电脑(相当于钥匙,绝不外泄)
ssh-keygen -t rsa -b 4096 -C "fff"

在终端运行上面的命令后生成隐藏的密钥文件:一般在C盘——用户——你的主机名文件夹中找到.ssh文件夹(后续需要在其中修改config文件以解决报错)。
私钥:~/.ssh/id_rsa
公钥:~/.ssh/id_rsa.pub
可通过如下命令,在终端直接打印查看公钥内容,以便复制。
cat ~/.ssh/id_rsa.pub
(2)上传公钥到 GitHub:GitHub 就可以使用这个公钥来验证你计算机上的私钥,从而完成身份验证。

(3)配置 VSCode 使用 SSH 与 GitHub 连接:先确保你已经安装了 Gitgit官网
在 VSCode 中,你可以选择通过 SSH 协议来与 GitHub 交互,也可以在git仓库中选择以SSH连接的方式克隆仓库。
运行以下命令,确保你使用的是 SSH 协议而不是 HTTPS 协议:(可选)
git remote set-url origin git@github.com:用户名/仓库名.git
这个命令会将 GitHub 仓库的远程 URL 设置为 SSH 协议。
使用 git 作为 SSH 用户名(这是 GitHub 的约定)。
(4)测试 SSH 连接:
在 VSCode 中,打开终端并运行以下命令来测试 SSH 连接是否成功:
ssh -T git@github.com
如果一切正常,GitHub 会返回类似于以下的信息:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
只需配置一次 SSH 密钥,之后的所有 Git 操作(如 git push, git pull)都不需要每次输入用户名和密码。只要你的私钥保存在本地,GitHub 就能自动验证身份。
解决报错从这里开始:
问题一描述(SSH连接):
vscode上 git clone 的时出现如下报错,实际是连接vscode和github的步骤4中,测试连接时出现的报错:
原因分析:
-
ssh: connect to host github.com port 22: Connection refused
说明 SSH 客户端尝试连接到 GitHub 的主机(github.com),并通过端口 22(SSH 默认端口)建立连接时失败了。具体来说,连接被拒绝了。 -
fatal: Could not read from remote repository.
这个错误通常出现在无法成功连接到远程仓库时,表示 Git 无法读取远程仓库的内容。因为 SSH 连接失败,Git 无法通过 SSH 协议与 GitHub 进行通信,因此没有办法访问仓库。
总之就是使用默认的22端口SSH连接失败,导致无法拉取远端仓库及代码,考虑更换为HTTPS的端口 443 [SSH 的备选端口]。
解决方案:
在网上查了一下有了一个可能的解决方案,但发现其还是有点小问题,故再更加全面具体的记录一下该报错及解决方法。
解决SSH连接报错的参考:
https://blog.csdn.net/weixin_45869649/article/details/124365483?ops_request_misc=%257B%2522request%255Fid%2522%253A%25223ebef4d90fac13a1b0811990c829fabe%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=3ebef4d90fac13a1b0811990c829fabe&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-124365483-null-null.142^v101^pc_search_result_base9&utm_term=ssh%3A%20connect%20to%20host%20github.com%20port%2022%3A%20Connection%20refused%20fatal%3A%20Could%20not%20read%20from%20remote%20repository.%20%20Please%20make%20sure%20you%20have%20the%20correct%20access%20rights%20and%20the%20repository%20exists.&spm=1018.2226.3001.4187
在.ssh文件夹下新建一个config文件(原来是没有的,至少我这里是这样的;有的话的看着修改添加即可)写入如下的内容:
Host github.com
User xxxx@qq.com (也可以是GitHub的用户名,仅此处需要修改)
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
User 中的必须是GitHub上对应的邮箱号。
这个配置的作用是通过 端口 443 来连接 GitHub 的 SSH 服务,而不是默认的 端口 22,从而解决了 ssh: connect to host github.com port 22: Connection refused 的问题。
GitHub 的默认 SSH 端口 22 被你的网络环境或防火墙阻止了。许多公司、学校或者一些特定网络环境会封锁 22 端口,导致无法通过该端口建立 SSH 连接。
端口 443 是 HTTPS 的标准端口,它通常是开放的,不会被防火墙或网络限制阻止。因此,通过修改 ~/.ssh/config 文件,使用 GitHub 提供的 端口 443 作为 SSH 连接端口,可以绕过防火墙或网络限制,从而成功建立与 GitHub 的 SSH 连接。
这样的话,那我们直接利用https来连接github不就可以了嘛?但是又出现了关于 SSL 证书验证失效的问题,还是用SSH比较好。
如果仅仅是网络环境或防火墙阻止了的话,在最开始直接换手机流量连接、关闭防火墙及安全助手是不是也可以呢?(我没有尝试,或许可以,欢迎补充)。
问题二描述(权限问题):
后面再测试连接(ssh -T git@github.com)的时候又出现了关于安全权限的报错:
原因分析:
错误信息表明,SSH 配置文件 (C:/Users/123/.ssh/config) 的权限设置不正确,可能是文件的所有者或访问权限配置不当。SSH 对于安全性要求较高,它要求 ~/.ssh/ 目录及其中的文件(尤其是配置文件和密钥文件)具有严格的权限设置,以防止未授权的用户访问。
关键在于 ~/.ssh/ 目录及其中的文件访问权限仅对授权的用户开发,即无法对于所有人开放,可能我们前面自己添加的config文件的访问权限是默认对所有人开放的,从而产生冲突,导致报错。
解决方案:
(1)查看config及密钥文件的访问权限:


可以看到新建文件都是默认对所有人开放的,而其它文件都是仅仅2组1用户的安全权限。
(2)修改config文件的用户权限

故直接点击<编辑>来更改权限——删除Everyone即可,然后出现如下提示:
(3)解决everyone的父类继承权限问题
后面在网上找到了如下的解决方案:
https://www.ab62.cn/article/6873.html


可以看到确实没有任何是用户有权限访问了,需要一个个对应添加。


添加到下面这样即可:
再次测试:
成功连接到GitHub!
后面就可以正常的克隆及更新代码了。
更多推荐






所有评论(0)