无法在 Windows 上克隆,但可以从 Gitlab 服务器在 Linux 上克隆

2023-12-14

我正在尝试通过 SSH 从远程 Gitlab 服务器克隆存储库。我在用Gitlab CE version 9.3.9 755bb71 and TortoiseGIT version 2.5.0 and git (for windows) version 2.14.0

SSH 密钥已正确安装,因为我已使用以下命令测试了身份验证

ssh -vT [email protected] -i /path/to/.ssh/key

我收到以下消息,表明使用上述密钥身份验证成功

OpenSSH_7.5p1, OpenSSL 1.0.2k  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 192.168.100.100 [192.168.100.100] port 22.
debug1: Connection established.
debug1: identity file /path/to/.ssh/key type 1
debug1: key_load_public: No such file or directory
debug1: identity file /path/to/.ssh/key-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.5
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to 192.168.100.100:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:fEztD+bNxKRs24poXJMlP0GBAP6Q1dZT80OhQAtDQJE
debug1: Host '192.168.100.100' is known and matches the ECDSA host key.
debug1: Found key in /path/to/.ssh/known_hosts:1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /path/to/.ssh/key
debug1: Server accepts key: pkalg ssh-rsa blen 535
Enter passphrase for key '/path/to/.ssh/key':
debug1: Authentication succeeded (publickey).
Authenticated to 192.168.100.100 ([192.168.100.100]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
Welcome to GitLab, John Doe!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3476, received 3264 bytes, in 2.2 seconds
Bytes per second: sent 1574.0, received 1478.0
debug1: Exit status 0

当我在 Windows 上使用 TortoiseGit 克隆存储库时,我在客户端上收到以下错误

Cloning into 'C:\path\folder'...
GitLab: Disallowed command
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

在gitlab服务器上,在gitlab-shell.log我收到以下警告消息

WARN -- : gitlab-shell: Attempt to execute disallowed command <git upload-pack '/path/to/repo.git'> by user with key key-1.

但当我尝试时git clone从另一台具有不同 SSH 密钥的 Linux 机器成功,我收到以下信息消息gitlab-shell.log在gitlab服务器上

INFO -- : gitlab-shell: executing git command <gitaly-upload-pack  {"repository":{"path":"/very/long/path/to/repo.git"},"gl_id":"key-2"}> for user with key key-2.

我花了 10 多个小时尝试调试所有内容,但我不确定有什么区别或问题到底出在哪里。我还尝试在本地添加以下内容.gitconfig文件 TortoiseGit 但这并没有改变任何东西。

[remote "origin"]
  uploadpack = git-upload-pack

最后,通过 HTTPS 克隆相同的存储库工作正常,使用用户名/密码没有任何问题。


注意:我刚刚升级到 Windows 版 Git 2.14.0...并且所有 ssh url 都不起作用:

> git ls-remote
GitLab: Disallowed command
fatal: Could not read from remote repository.

(with origin是 ssh url)

另一个副作用:git-for-windows/git 问题 1258

fatal: protocol error: bad line length character: Not

看起来好像 BitBucket 在看argv[0](通常git-upload-pack,使用回归 git) 来确定它是否是允许的命令。

所以我认为这是设计使然git被拒绝,同时git-upload-pack is not.

GitLab 上出现同样的错误:gitlab-ce 问题 36028.
The 待处理的合并请求 显式恢复git-xxx当它检测到一个git xxx command.

See gitlab_shell.rb#parse_cmd(args)

  def parse_cmd(args)
    # Handle Git for Windows 2.14 using "git upload-pack" instead of git-upload-pack
    if args.length == 3 && args.first == 'git'
      @command = "git-#{args[1]}"
      args = [@command, args.last]
    else
      @command = args.first
    end

在 Windows 端的 Git,修复正在进行中:请参阅提交 0f33428

恢复“git_connect:更喜欢 Git 的内置功能而不是虚线形式”

看来这个更改(旨在修复测试 与本地存储库交互时git-upload-pack不在PATH) SSH 访问回归。

A 适用于 Windows 的 Git 2.14.0(2)正在开发中,并且在本次编辑时 30 分钟前刚刚发布 (2017-08-07T11:05:34Z UTC)。


原答案

If key1和你的一样/path/to/.ssh/key并且确实识别了 John Doe,这应该意味着 John Doe 无权访问该存储库(就像这里一样).
检查 key2 是否与不同的用户关联。

如果两个键都引用同一用户,那么这更多是本地配置问题(如这个答案)。 还要检查您的 TortoiseGit 是否使用与测试中相同的密钥:

set "GIT_COMMAND_SSH=ssh -v"
# launch TortoiseGit from that CMD session

然后,您将看到 TortoiseGit 在使用 ssh url 克隆存储库时使用的内容。你可能需要定义一个.ssh/config file.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 Windows 上克隆,但可以从 Gitlab 服务器在 Linux 上克隆 的相关文章

  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • gerrit - git(pull、checkout、cherrypick)的用途是什么?

    在 Android 的 gerrit ex 中 link https android review googlesource com c 109934 要下载补丁 我看到4个选项 回购下载 checkout pull 择优挑选 它们之间有什
  • 致命:refspec 的远程部分不是 :capability^{} 中的有效名称

    从 github 克隆给定的存储库 然后推送到 bitbucket 上的新存储库 我收到错误 gt fatal remote part of refspec is not a valid name in capabilities gt fa
  • MINIDUMP_TYPE 枚举值的哪种组合将为我提供最“完整”的小型转储?

    我希望我的应用程序创建一个小型转储以帮助调试未处理的异常 在创建转储之前 我可能不知道我需要什么类型的小型转储 那么什么组合小型转储类型 http msdn microsoft com en us library ms680519 28v
  • 嵌入式 Linux – 部署固件更新的机制? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在 Yocto 项目上开发一个嵌入式 Linux 项目 一个工业应用程序 我有几个问题想问那些有嵌入式 Linux 经验的人 Y
  • 研究缓冲区溢出时应该使用哪些版本的 GCC 或标志?

    最近 作为计算机工程专业的本科生 我一直在研究缓冲区溢出 出于兴趣 我开始研究缓冲区溢出 但在尝试在我的计算机上用 GCC 4 9 1 在 Debian Jessie 中 编译的我自己的 C 程序中实现它们时遇到了困难 我听说较新的编译器中
  • 如何使用命令行压缩指定文件夹

    你们能告诉我如何将指定的文件压缩到同一个 Zip 文件中吗 让我告诉我我的文件夹是如何填充的 任务调度程序有我的数据库的备份 并每天将它们保存到文件中 它每天创建 4 个数据库备份 这意味着每天会多出 4 个文件 因此 我需要将新创建的备份
  • 从 vbscript 获取 bat 中的错误级别

    我试图确定用户是否在 UAC 提示中单击 否 如果是 则不设置空端口 我将此脚本称为批处理文件 如果用户单击 否 我想退出该脚本 VB 脚本 选项显式 Main Sub Main Dim oShell objWMIService servS
  • 为什么 XRecordDisableContext() 不起作用?

    void Callback XPointer XRecordInterceptData pRecord std cout lt lt my logs n int main if auto const pDisplay XOpenDispla
  • Delphi定时器比毫秒更精确

    我在 Delphi 中有一个程序 它以 25 赫兹 每秒 25 次 的速度从外部应用程序获取帧 然后通过创建 1 2 个额外帧将其转换为 60 赫兹 每秒 60 帧 我需要通过连续构建帧缓冲区并从单独的线程输出帧来输出这些额外的帧 问题是
  • 如何wget目录中最新的文件

    我想编写一个 bash 脚本来下载并安装最新的每日构建程序 RStudio 是否有可能使wget仅下载目录中最新的文件http www rstudio org download daily desktop http www rstudio
  • 为什么我无法推送这个最新的 Git 子树?

    我将 Git 子树与我正在开发的几个项目一起使用 以便在它们之间共享一些基本代码 基本代码经常更新 升级可能发生在任何项目中 最终所有项目都会更新 我遇到了一个问题 git 报告我的子树是最新的 但推送被拒绝 例如 git subtree
  • Windows 每秒进行一次线程切换的频率是多少? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Windows 通常 每秒进行一次线
  • 如何在shell脚本中给出密码?

    在 shell 脚本文件中 我使用一些命令 例如scp and make install要求我输入密码 我运行一个 shell 脚本来编译一个大项目 一段时间后它会要求我输入密码才能使用scp 我需要等待该过程并在此之后提供密码 我只想通过
  • 在 scp 的简单函数包装中使用波形符 ~ 时出现问题

    我想放置一个简单的bash功能在我的 bashrc围绕着scp通过接受 源 参数和 目标 参数来命令 到目前为止已经尝试过 function send eval scp 1 user annoyingly long server name
  • 如何在 Gitolite 配置中添加存储库的描述

    我正在使用 gitolite 为我的 GIT 服务器进行用户维护 除了仓库描述之外 一切正常 我已经在 gitolite conf 中设置了存储库的描述 例如 reponame repo description 早期版本 v3 x 之前 可
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 如何将 npm 依赖项指定为 github 子文件夹 url?

    我的 git 存储库 README md packages common package json main package json 如何指定common依赖于mainpackage json 作为 github 子文件夹 url 这不起
  • 无法卷曲 git 标签

    我想通过命令行卷曲 git 标签 curl O http someurl 但是当我尝试解压文件时它被破坏了 有谁知道问题是什么 You can curl来自 GitHub 等 git 存储库托管服务的 git 标签 因为它有专用压缩包服务

随机推荐

  • 在 Visual Studio 中显示构建时间

    我们的构建服务器构建 C 项目之一花费的时间太长 它用视觉工作室2008 跑步devenv com MyApp sln Build see devenv 命令行开关 尽管这是针对较新版本的 VS 有没有办法让 devenv com 记录在解
  • 如何根据表单状态隐藏普通按钮

    我试图隐藏我的保存vanilla根据表单状态按钮 当表单状态 创建时 不应显示普通按钮 我尝试了不同的方法 但没有任何作用 我在 js 中创建一个函数 如果表单处于创建状态 则返回 true function isHideState for
  • 以编程方式安装 APK - 返回值

    在我的应用程序中 我从我的活动中调用 javascript 接口 在与此界面关联的 web 视图中 我要求用户下载并安装 APK 我正在使用 startActivityForResult 来启动安装过程 下载文件后 这是代码 Intent
  • 游戏在快速从后台恢复后退出暂停状态

    我正在使用 SpriteKit 开发一个游戏 可以在执行期间暂停并可以恢复 但我有一个问题applicationDidEnterBackground当游戏暂停时按下主页按钮时 因为当我恢复游戏时 即使游戏之前已暂停 实体也会立即开始移动 我
  • android studio 禁用日期选择器中的天数

    我想禁用日期选择器中的某一天 我有一个数组存储我想要禁用的日期 我有这个代码来禁用日历中的日期 for Calendar loopdate min date c min date c before max date c min date c
  • 如何将原始电子邮件 (MIME) 从 AWS SES 转换为 Gmail?

    我有一个 Gmail 帐户链接到我的域帐户 AWS SES 会将消息发送到我的 S3 存储桶 从那里 SNS 将以原始格式将消息转发到我的 Gmail 地址 如何自动将原始消息转换为标准电子邮件格式 原始消息采用标准电子邮件格式 我认为您想
  • python 中的运算符重载,对象位于运算符右侧

    我最近了解了 python 中的运算符重载 我想知道以下内容是否可行 考虑以下假设 人为的类 class My Num object def init self val self val val def add self other num
  • C++ getline 方法不起作用

    抱歉 我对 C 很陌生 但一般不熟悉编程 所以我尝试做一个简单的加密 解密 然而 当我对以前的代码添加修改时 因此没有两个用于加密和解密的程序 我发现代码 getline 方法不再起作用 相反 它只是在运行代码时忽略它 这是代码 int m
  • 在 Google 自定义搜索中使用 TBS(或等效参数)

    使用时谷歌自定义搜索用于选择特定类型搜索引擎的 TBM 参数 例如 专利的 tbm pts 或博客的 tbm blg 似乎受到支持 尽管参数列表中没有正确记录这一点 然而 当使用这种 特殊 搜索时 通常会使用 TBS 参数来扩展查询 不幸的
  • 敏感的 ASP.NET Session 数据是否需要加密?

    ASP NET Session string key 数据是否需要加密才能安全 如果此类数据始终保留在服务器上 那么只要数据是通过 SSL 从客户端发送的 那么在那里存储信用卡信息 密码等是否就可以安全了 鉴于所有的反对票都投在这里 我将添
  • 在android中显示后台服务的弹出窗口

    您好 android 中可以显示后台运行服务的弹出对话框吗 答案是肯定的 我该怎么做 有几种选择 您可以使用主题并使活动的外观和行为类似于对话框 如这个问题 通过设置android theme你的属性
  • img 标签显示方向错误

    我在这个链接中有一张图片 http d38daqc8ucuvuv cloudfront net avatars 216 2014 02 19 2017 13 48 jpg 正如您所看到的 这是一个方向正确的正常图像 但是 当我将此链接设置为
  • 如何使用seaborn实现Lineplot,x轴为“日期”

    我尝试实现seaborn lineplot 数据框具有日期值列表作为索引 试图将其作为 x 轴 Dataframe info 将 日期 字段显示为对象 我需要以日期为 x 轴的 4 种类型的列值的线图 当我尝试执行下面的代码时 它显示错误消
  • 为什么从 java 9 PhantomReference java doc 开始,它就专门用于 POST-mortem 清理操作,尽管它之前是 PRE-mortem

    PhantomReference java 8 的 java 文档更少看起来像这样 幻像引用对象 在收集器之后排队 确定它们的引用对象可以以其他方式被回收 幻影 参考最常用于调度事前清理 行动以比 Java 更灵活的方式 最终确定机制 如果
  • Android - XPath 评估速度非常慢

    我在用着XPath查询我的XML file目前大约有100KB 我正在迭代一个数组并查询列表中的每个值 不幸的是单个查询大约需要 3 4 秒在调试器下 在禁用调试器的情况下稍微少一些 有什么想法为什么这么慢吗 我用一个Galaxy S2供测
  • 为什么非 pic 代码不能使用运行时修复完全实现 ASLR?

    据我了解 PIC 代码使 ASLR 随机化更加高效 更加容易 因为代码可以放置在内存中的任何位置 而无需更改代码 但如果我根据维基百科理解正确的话搬迁动态链接器可以在运行时进行 修复 以便可以找到符号 尽管代码不是位置无关的 但根据我在这里
  • Java中ConcurrentSkipListMap的非线程安全方法

    在我的 Java 项目中 我需要以多线程方式使用 TreeMap 我发现 ConcurrentSkipListMap 是我所需要的 但有些方法不是线程安全的 其中之一 containsKey 对象键 以多线程方式使用此方法的典型解决方案是什
  • 标题应该按什么顺序包含? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在头文件 cpp 文件中应该以什么顺序声明头文件 显然 后续标头所需的标头应该更早 并且特定于类的标头应该在 cpp 范围而不是标头范围中 但是是否有设定的顺序约定 最佳实践 在头文件中
  • 安装适用于 Android 的 ADB 接口驱动程序

    我尝试通过设备管理器安装 将手机连接到笔记本电脑后 我在设备管理器的 其他设备 部分中收到 Celkon 内置 GSM 手机 链接 我右键单击并单击 更新驱动程序 和 从指定位置安装 并找到 inf 文件 usb2ser 2kXP inf
  • 无法在 Windows 上克隆,但可以从 Gitlab 服务器在 Linux 上克隆

    我正在尝试通过 SSH 从远程 Gitlab 服务器克隆存储库 我在用Gitlab CE version 9 3 9 755bb71 and TortoiseGIT version 2 5 0 and git for windows ver