当前位置: 首页 > 知识库问答 >
问题:

git - Git SSH别名配置后无法切换用户,如何解决权限报错?

扶珂
2024-10-11

git操作求助!
ssh给github.com配置了两个别名,github-pccl和github-learn。但ssh连接只会使用第一次的连接用户,导致第二次会有权限报错
ssh config的配置如下:

# ucloud_pccl github
Host github-pccl
       HostName github.com
       User emma.bi@ucloud.cn
       IdentityFile ~/.ssh/id_rsa

# 163 github
Host github-learn
    HostName github.com
    User bipeishan666@163.com
    IdentityFile ~/.ssh/id_rsa_learn

现象如下:
第一次在仓库执行git fetch,走github-learn的配置;
删除known_hosts;
第二次另一个仓库执行git fetch,known_hosts文件没有重新生成,导致fetch会报错

ssh: Could not resolve hostname github-pccl: nodename nor servname provided, or not known
fatal: Could not read from remote repository

确认.ssh/id_rsa.ssh/id_rsa_learn配置是没有问题的

执行ssh -T git@github-pccl输出Hi bippeishan! You've successfully authenticated, but GitHub does not provide shell access
用户还是第一次的

做过以下尝试:

  1. 重启电脑
    git fetch 会重新生成known_hosts文件,使用新的配置
  2. 退出terminal,重新打开
    和上面一样的报错
  3. 清除git缓存:git credential-cache exit
    和上面一样的报错

期望结果:希望在删除known_hosts文件后,执行git fetch能重新使用新的配置生成known_hosts文件,而不需要重启电脑

共有1个答案

鄢英毅
2024-10-11

针对你描述的问题,主要涉及到SSH别名配置和Git远程仓库连接时SSH用户的识别问题。在你的SSH配置中,你已经为两个不同的GitHub账户设置了别名(github-pcclgithub-learn),但是Git在连接时可能没有正确地使用这些别名。这里有几个步骤和建议可以帮助你解决问题:

1. 检查Git远程仓库的URL

首先,确保你的Git仓库的远程URL使用了正确的SSH别名。你可以通过以下命令查看远程仓库的URL:

git remote -v

如果URL没有使用SSH别名(如github-pcclgithub-learn),你需要将其更改为正确的别名。你可以使用git remote set-url命令来更新URL,例如:

git remote set-url origin git@github-pccl:user/repo.git
# 或
git remote set-url origin git@github-learn:user/repo.git

2. 确保SSH别名在~/.ssh/config中正确配置

你的SSH配置看起来是正确的,但请确保没有语法错误(如多余的空格或缩进问题)。另外,请确保~/.ssh/config文件的权限设置正确(通常应该是600)。

3. 清理Git的SSH缓存

虽然你已经尝试清理了Git的credential cache,但还需要确保SSH客户端本身没有缓存旧的连接信息。你可以尝试完全删除~/.ssh/known_hosts文件,然后重新连接SSH以重新生成该文件。

4. 强制Git使用SSH别名

如果Git仍然不识别SSH别名,你可以尝试在Git命令中直接指定SSH命令,以确保使用正确的别名。例如:

ssh -i ~/.ssh/id_rsa_learn git@github-learn -T
# 或
git fetch origin ssh://git@github-learn/user/repo.git

但是,请注意,Git的fetch命令通常不接受这样的URL格式。这里的重点是展示如何显式地通过SSH命令连接到Git服务器。

5. 检查Git配置

确保Git的全局配置(如user.nameuser.email)与SSH别名配置的用户身份一致,尽管这通常不会影响SSH连接的权限问题。

6. 调试SSH连接

使用-vvv选项来运行SSH命令,以便获取更详细的调试信息,这可以帮助你了解连接过程中发生了什么:

ssh -Tvvv git@github-pccl

7. 重新生成SSH密钥(如果必要)

如果以上步骤都不能解决问题,你可能需要重新生成SSH密钥对,并确保它们与GitHub账户正确关联。

通过上述步骤,你应该能够解决SSH别名配置后无法切换用户的问题。如果问题依旧存在,可能需要更详细地检查你的系统配置或咨询更专业的技术支持。

 类似资料:
  • 本文向大家介绍db.serverStatus()命名执行时报无权限问题的解决方法,包括了db.serverStatus()命名执行时报无权限问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 1、问题描述 今天在执行db.serverStatus()命令时给出了“ "errmsg" : "not authorized on admin to execute command { serverSt

  • 我的Dockerfile配置: 报错信息: 我已经尝试过以下几种方法: Dockerfile配置中添加RUN chmod -R 777 /yice Dockerfile配置添加 USER root,它会报: 找不Chrome,然后因为ghcr.io/puppeteer/puppeteer:latest镜像切换的用户名为pptruser,所以我手动在代码里给puppeteer配置executable

  • 本文向大家介绍Android studio 切换flutterSDK之后报错及解决办法(推荐),包括了Android studio 切换flutterSDK之后报错及解决办法(推荐)的使用技巧和注意事项,需要的朋友参考一下 Windows系统上面修改了flutter sdk的环境变量地址之后Android studio上面运行flutter项目就会报错 类似于: Could not read sc

  • 问题内容: 当我将脚本上传到服务器时,出现此错误 警告:未知:打开(/ tmp / sess_58f54ee6a828f04116c2ed97664497b2,O_RDWR)失败:第0行的未知中的权限被拒绝(13) 警告:未知:无法写入会话数据(文件)。请在第0行的Unknown中验证session.save_path的当前设置正确(/ tmp) 尽管我将/ tmp文件夹的权限设置为777,但在我