met*_*pia 3 git ssh port uri github
我正在研究SSH URI 规范,以便更多地了解用于通过 SSH 访问 Github 或 Bitbucket 等服务中的存储库的 URL。
\n典型的 SSH Github URL 如下所示:git@github.com:myuser/myrepo.git,我认为可以将其分解为以下部分:
scheme authority\n | |\n /\xe2\x80\xbe\xe2\x80\xbe\\/\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\\\n ssh://git@github.com:myuser/myrepo.git\n \\_/ \\________/ \\_______________/\n | | |\n user host port\nRun Code Online (Sandbox Code Playgroud)\n我不明白的是端口部分。官方通用 URI 规范规定端口应仅包含数字值。SSH URI 方案规范遵循通用 URI 规范。OpenSSH配置手册的作用相同。
\n那么为什么他们在端口部分使用类似路径的文本呢?这是否偏离了事实上已制定的标准?还是我对整件事的理解错误?
\n如果有人能澄清这一点,我将不胜感激。
\nTL:DR问题中描述的语法是一个名为 的旧程序的继承rcp,并且不符合 URI 规范。
解释
\n感谢@jthill 和@torek 为我指明了正确的方向。这是我经过几天的研究后的猜测。
\nOpenSSH 中的所有三个远程操作程序(ssh、scp、sftp)都接受符合 SSH URI 方案的参数,该方案在其自己的IETF 规范中进行了描述。
广义上讲,任何 URI 都由五个部分组成:方案、权限、路径、查询和片段。另外,权限可以由userinfo、host、port组成。对于 SSH URI 方案,仅允许方案、权限和路径。
\n scheme authority path\n | | |\n /\xe2\x80\xbe\xe2\x80\xbe\\/\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\\/\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\xe2\x80\xbe\\\n ssh://git@github.com:22/myuser/myrepo.git\n \\_/\\_________/\\_/\n | | |\n user host port\nRun Code Online (Sandbox Code Playgroud)\n然而,有一种替代语法与标准 SSH URI 方案非常相似,但并不完全符合它。此语法是 1981 年创建的旧(远程复制)程序的遗产rcp,比 URI 协议创建早了近十五年。当Berkeley r 命令发布时,要在rsh(远程 shell)或rlogin(远程登录)中指定操作的目标,只需要指定要在其中执行操作的远程计算机,以及可能的用户那台机器也是如此。当时的共识是语法username@hostname。然而,该rcp程序还有一个附加条件,即为了从一个远程位置复制文件或将文件复制到一个远程位置,除了用户和主机之外,开发人员还需要指定该远程计算机中文件的路径,就像cp程序一样。他们遇到的语法是将路径附加到用户/主机声明的末尾,并用冒号分隔:(username@hostname:path/to/file如其自己的联机帮助页中所述)。
git@github.com:myuser/myrepo.git\n \\_/ \\________/ \\_______________/\n | | |\n user host path\nRun Code Online (Sandbox Code Playgroud)\n当 OpenSSH 团队实现该scp程序时,他们希望为已经使用的开发人员提供熟悉的 API rcp,因此除了新的标准化 SSH URI 方案之外,他们决定继续支持这种旧的自定义语法。然后,在 2005 年,Git 进入了对 SSH 的原生支持,可能在幕后使用 OpenSSH,当 SSH 用于远程操作(如 、 、 和 )时,最终使用了类似rcp的语法。Git 文档将此语法称为类 scp 语法,并且在scp 联机帮助页、git-clone 文档和Git 协议文档中对其进行了简要描述。最后,尽管缺乏标准化,但它似乎是所有云 Git 服务(如 Github 或 Bitbucket)在提供用于克隆存储库的 URL 时使用的语法。clonefetchpushpull
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |