自定义SSH端口上的Git

1u4esq0p  于 2022-12-21  发布在  Git
关注(0)|答案(6)|浏览(137)

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

git clone git@mydomain.example:gitolite-admin

是否有办法将此转换为使用自定义SSH端口号?
我还应该提到我正在Windows上运行Cygwin,我看到多个地方说要将自定义端口添加到~/.ssh/config文件中:

Host mydomain.example
    Port 12345

然而在Cygwin中,该文件似乎不存在。

7gs2gvoe

7gs2gvoe1#

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

请注意,端口号应该不带方括号:第一个月

kgsdhlau

kgsdhlau2#

上面的答案很不错,但对于像我这样的Git新用户来说并不清楚。所以经过一番调查,我给出了这个新答案。

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

当配置文件不存在时,您可以创建一个。除了port之外,配置文件还可以包含其他SSH配置选项:userIdentityFile等等,配置文件如下所示

Host mydomain.example
    User git
    Port 12345

如果您运行的是Linux,请注意配置文件必须具有严格的权限:用户可读/写,其他用户不可访问

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端口,我们需要使用标准语法

t40tm48m

t40tm48m3#

当您需要主目录(在任何UNIX上)的相对路径时,请使用以下奇怪的语法:
第一个月
例如,如果存储库位于服务器jill.example上的/home/jack/projects/jillweb中,并且您以jack身份登录,sshd侦听端口4242:
ssh://jack@jill.example:4242/~/projects/jillweb
jill身份登录时(假设您具有文件权限):
ssh://jill@jill.example:4242/~jack/projects/jillweb

wydwbb8l

wydwbb8l4#

(更新:几年后Google和Qwant搜索“git non-default ssh port”时,“airlines”仍然会把我发送到这里)在更新的git版本中,一个可能更好的方法是使用GIT_SSH_COMMAND ENV.VAR,如下所示:
第一个月
这具有允许任何其他ssh合适选项(端口、priv.key、IPv6、PKCS#11设备...)的附加优点。

kmbjn2e3

kmbjn2e35#

如果您使用自定义端口(转发)进行SSH,正确的解决方案是

git clone ssh://git@url:2222/user/repo.git

ssh://标头是诀窍。

fnatzsnv

fnatzsnv6#

Github已经发布了a helpful article来解释如何解决这个问题。

相关问题