【问题标题】:Git On Custom SSH Port自定义 SSH 端口上的 Git
【发布时间】:2011-08-11 16:34:03
【问题描述】:

我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号(不是 22)。问题是虽然我知道我可以在创建远程配置时提供端口号,但似乎在执行 git clone 时我不能这样做。我正在使用 gitolite,所以我克隆的命令如下所示:

git clone git@mydomain.com:gitolite-admin

有没有办法将其隐藏为使用自定义 ssh 端口号?

我还应该提到我在 Windows 上运行 cygwin。我见过多个地方说要将自定义端口添加到~/.ssh/config 文件中,例如

Host mydomain.com
    Port 12345

但是在 cygwin 中,该文件似乎不存在。

【问题讨论】:

  • 文件的路径名是用户主目录中的.ssh/config(不是conf)。基本操作不需要,因此默认不存在。您将不得不创建它。尝试vim ~/.ssh/config(或使用您喜欢的已安装文本编辑器)打开/创建它。
  • 在Windows上读取/Users/USERX/.ssh/config你需要将你的HOME本地环境设置为/Users/USERX

标签: git version-control ssh cygwin


【解决方案1】:
git clone ssh://git@mydomain.com:[port]/gitolite-admin

注意端口号应该没有方括号:[]

【讨论】:

  • 这确实有效,但是 Chris Johnsen 更正允许在使用自定义端口号时使用干净的 url
  • :-) 如果你问我,git URL语法不干净,上面更规范
  • 我承认您给出的语法更具描述性,但必须记住添加自定义端口号很烦人。配置该端口号,然后不必记住这更容易,但对每个人来说都是自己的(这就是为什么可以双向完成):)
  • 请注意,如果您删除协议,它将不起作用。即,如果您尝试以下操作,它将无法正常工作。 git clone git@mydomain.com:[port]/gitolite-admin
  • 在带有 plink 的 Windows 上,工作语法似乎是 git clone ssh://git@mydomain.com:port/home/user/gitolite-admin
【解决方案2】:

以上答案很好,但对于像我这样的新 git 用户来说还不清楚。所以经过一番调查,我提供了这个新的答案。

1 ssh 配置文件方式有什么问题?

当配置文件不存在时,你可以创建一个。除了port 配置文件还可以包含其他ssh 配置选项:user IdentityFile 等等,配置文件看起来像

Host mydomain.com
    User git
    Port 12345

如果你运行的是linux,注意配置文件必须有严格的权限:用户可以读/写,其他人不能访问

2 ssh url 方式呢?

很酷,我们唯一应该知道的是 git 中的 ssh url 有两种语法

  • 标准语法ssh://[user@]host.xz[:port]/path/to/repo.git/
  • 类似scp的语法[user@]host.xz:path/to/repo.git/

默认情况下,Gitlab 和 Github 会显示 类似 scp 的语法 url,我们不能提供自定义的 ssh 端口。所以为了改变ssh端口,我们需要使用标准语法

【讨论】:

    【解决方案3】:

    当你想要从你的主目录(在任何 UNIX 上)的相对路径时,你会使用这种奇怪的语法:

    ssh://[user@]host.xz[:port]/~[user]/path/to/repo

    例如,如果 repo 位于服务器 jill.com 上的 /home/jack/projects/jillweb 中,并且您以 jack 身份登录,sshd 侦听端口 4242:

    ssh://jack@jill.com:4242/~/projects/jillweb

    当以jill 登录时(假设您有文件权限):

    ssh://jill@jill.com:4242/~jack/projects/jillweb

    【讨论】:

    • 伙计,这已经被难住了一段时间,这正是我需要知道的。你知道这是在哪里记录的吗?
    • @Shaun Wilson 抱歉,我不太记得了。但我花了一段时间才找到答案,所以我想我应该在这里分享它,因为这是我的死胡同之一。
    • 谢谢!特别是如果您使用共享托管计划, ~[user] 部分很重要。这帮助我克隆了我的仓库。
    • @ShaunWilson 路径规范是标准的 UNIX 路径。如果您登录到 UNIX 系统,~ 是主目录的简写,它既可以节省大量输入,又因为主目录可能位于非标准位置。以上可能不适用于 Windows 服务器。
    • @Samuel Åslund 谢谢,我已经更新了我的答案。我经常忘记 Windows,因为……好吧,我并不是说俗气,但相比之下它太可怕了。尽管如此,这是一个重要的区别。
    【解决方案4】:

    (更新:几年后 Google 和 Qwant “航空公司”在搜索“git 非默认 ssh 端口”时仍将我发送到此处) 在较新的 git 版本中,一种可能更好的方法是使用 GIT_SSH_COMMAND ENV.VAR,例如:

    GIT_SSH_COMMAND="ssh -oPort=1234 -i ~/.ssh/myPrivate_rsa.key" \ git clone myuser@myGitRemoteServer:/my/remote/git_repo/path

    这具有允许任何其他适合 ssh 的选项(端口、priv.key、IPv6、PKCS#11 设备...)的额外优势。

    【讨论】:

      【解决方案5】:

      Github 已发布 a helpful article 解释如何解决此问题。

      【讨论】:

        猜你喜欢
        • 2015-02-10
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 2011-04-12
        • 2020-02-25
        • 2020-09-27
        • 2011-04-05
        相关资源
        最近更新 更多