在自定义SSH端口上Git


149

我的VPS提供程序建议我将SSH端口留给他们默认为其分配的自定义端口号(而不是22)。事情是,虽然我知道我可以在创建远程配置时提供端口号,但在执行git clone时似乎做不到。我正在使用gitolite,因此我克隆的命令如下所示:

git clone git@mydomain.com:gitolite-admin

有没有一种方法可以隐瞒使用自定义ssh端口号?

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

Host mydomain.com
    Port 12345

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


8
该文件的路径名位于 .ssh/config(而不是conf)用户的主目录中。基本操作不需要它,因此默认情况下不存在。您将不得不创建它。尝试vim ~/.ssh/config(或使用您首选的安装的文本编辑器)打开/创建它。
克里斯·约翰森


在Windows上阅读,/Users/USERX/.ssh/config您需要将HOME本地环境设置为/Users/USERX
kenorb 2014年

Answers:


327
git clone ssh://git@mydomain.com:[port]/gitolite-admin

请注意,端口号应在其中而不包含方括号:[]


确实可以,但是Chris Johnsen更正允许在使用自定义端口号时使用干净的URL
ryanzec 2011年

6
:-)如果您问我,git URL语法不干净,并且上面的内容更加规范化
Christo

我承认您提供的语法更具描述性,但必须记住添加自定义端口号很烦人。配置该端口号,然后不必记住它就容易了一些,但各有各的(这就是为什么它可以双向完成的原因:)
ryanzec 2011年

48
请注意,如果删除协议,它将无法正常工作。即,如果您尝试以下操作,它将无法正常工作。git clone git@mydomain.com:[port]/gitolite-admin
比杰·伦塔

1
在带有plink的Windows上,工作语法似乎是git clone ssh://git@mydomain.com:port/home/user/gitolite-admin
RomanPlášil2014年

18

以上答案很好,但对于像我这样的新git用户并不清楚。因此,经过一些调查,我提供了这个新答案。

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

当配置文件不存在时,您可以创建一个。除了port配置文件,还可以包含其他ssh config选项: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将显示类似语法 URL 的scp,并且我们无法提供自定义ssh端口。因此,为了更改ssh端口,我们需要使用标准语法


14

当您想要从主目录(在任何UNIX上)中获得相对路径时,请使用以下奇怪的语法:

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

例如,如果回购是在/home/jack/projects/jillweb服务器上jill.com,你是在为登录jacksshd侦听端口4242:

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

并且以jill(假设您具有文件许可权)身份登录时:

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


老兄,这个问题已经困扰了一段时间,而这正是我需要知道的。您知道在哪里记录吗?
肖恩·威尔逊

@Shaun Wilson对不起,我不太记得。但是花了我一段时间才找到答案,所以我觉得应该在这里分享,因为这是我的死胡同之一。
Daniel Santos

1
谢谢!尤其是如果您使用共享主机计划,〜[用户]部分非常重要。这帮助我克隆了我的仓库。
吉姆·威尔逊

2
@ShaunWilson路径规范是标准的UNIX路径。如果您登录到UNIX系统,〜是主目录的简写,它既可以节省很多键入内容,也可以使用,因为主目录可能位于非标准位置。以上内容可能不适用于Windows服务器。
塞缪尔·奥斯隆德

@SamuelÅslund谢谢,我已经更新了答案。我经常忘记Windows,因为,……我并不是故意要发粘,但是相比之下,这太可怕了。尽管如此,这是一个重要的区别。
丹尼尔·桑托斯

9

(更新:几年后,Google和Qwant“航空公司”在搜索“ git non-default ssh port”时仍然将我发送到这里)在较新的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设备等)的附加优点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.