自定义 SSH 端口上的 Git

问题描述 投票:0回答:6

我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号(而不是 22)。问题是,虽然我知道我可以在创建远程配置时提供端口号,但在进行 Git 克隆时似乎无法提供相同的操作。我正在使用 gitolite 所以克隆命令看起来像:

git clone [email protected]:gitolite-admin

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

我还应该提到我正在 Windows 上运行 Cygwin。我看到很多地方都说要将自定义端口添加到

~/.ssh/config
文件中:

Host mydomain.example
    Port 12345

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

git version-control ssh cygwin
6个回答
458
投票
git clone ssh://[email protected]:[port]/gitolite-admin

请注意,端口号应该不带方括号:

[]


50
投票

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

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

当配置文件不存在时,您可以创建一个。除了

port
配置文件还可以包含其他SSH配置选项:
user
IdentityFile
等等,配置文件看起来像

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


31
投票

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

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

例如,如果存储库位于服务器

/home/jack/projects/jillweb
上的
jill.example
中,并且您以
jack
身份登录,并使用
sshd
监听端口 4242:

ssh://[email protected]:4242/~/projects/jillweb

当以

jill
身份登录时(假设您有文件权限):

ssh://[email protected]:4242/~jack/projects/jillweb


24
投票

(更新:几年后,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 设备...)的额外优势。


23
投票

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

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

ssh://
标题就是窍门。


0
投票

编辑位于存储库 .git 目录中的“config”文件,并找到“[remote "origin"]”下以“url =”开头的行。

将该行更改为“url = ssh://[email protected]:port#/remote/dir”

© www.soinside.com 2019 - 2024. All rights reserved.