我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号(而不是 22)。问题是,虽然我知道我可以在创建远程配置时提供端口号,但在进行 Git 克隆时似乎无法提供相同的操作。我正在使用 gitolite 所以克隆命令看起来像:
git clone [email protected]:gitolite-admin
有没有办法将其隐藏为使用自定义 SSH 端口号?
我还应该提到我正在 Windows 上运行 Cygwin。我看到很多地方都说要将自定义端口添加到
~/.ssh/config
文件中:
Host mydomain.example
Port 12345
但是在 Cygwin 中,该文件似乎不存在。
上面的答案很好,但对于像我这样的 Git 新用户来说还不清楚。因此,经过一番调查,我提供了这个新答案。
当配置文件不存在时,您可以创建一个。除了
port
配置文件还可以包含其他SSH配置选项:user
IdentityFile
等等,配置文件看起来像
Host mydomain.example
User git
Port 12345
如果您运行的是Linux,请注意配置文件必须具有严格的权限:用户读/写,其他人无法访问
很酷,我们唯一应该知道的是 Git 中的 SSH URL 有两种语法
ssh://[user@]host.xz[:port]/path/to/repo.git/
[user@]host.xz:path/to/repo.git/
默认情况下,Gitlab 和 GitHub 将显示类似 scp 的语法 URL,并且我们无法提供自定义 SSH 端口。因此,为了更改 SSH 端口,我们需要使用标准语法
当您想要主目录(在任何 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
(更新:几年后,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 设备...)的额外优势。
如果您使用 SSH 的自定义端口(转发),正确的解决方案是
git clone ssh://git@url:2222/user/repo.git
ssh://
标题就是窍门。
编辑位于存储库 .git 目录中的“config”文件,并找到“[remote "origin"]”下以“url =”开头的行。
将该行更改为“url = ssh://[email protected]:port#/remote/dir”