使用其他SSH端口添加git远程连接

416

我在Git中如何添加远程源服务器,如果我的主机使用不同的SSH端口?

git remote add origin ssh://user@host/srv/git/example
9个回答

698

你可以直接这样做:

git remote add origin ssh://user@host:1234/srv/git/example

1234 是使用的 ssh 端口号。


19
谢谢。只是一个补充:在路径部分,请使用绝对路径,而不是相对于用户主目录的相对路径... - Snicolas
15
如果你的 repo 存在于用户主目录下,它可以正常工作:**/home/someuser/git-repos/example.git** --> ssh://someuser@<host>:<port>/~/git-repos/example.git。顺便说一句,你可以通过执行命令 git clone --bare <address> 来获取一个名为 <name>.git 的 repo。 - MartinL
使用gitolite和git 1.8.1.2,我必须使用相对路径(即ssh://git@myhost.com:1234/project.git,而不是ssh://git@myhost.com:1234/~/repositories/project.git)。我猜测gitolite在这里做了一些自动化处理。 - kitti
63
请注意,如果您删除协议,它将无法工作。例如,如果您尝试以下操作,则不起作用。 git remote add origin user@host:1234/srv/git/example - Bijay Rungta
我可以无需密码访问我的名为myhost的git服务器,只需执行以下操作即可:git remote add origin myhost:/srv/git/example - undefined
显示剩余8条评论

155
你需要编辑你的~/.ssh/config文件。添加类似以下内容:
Host example.com
    Port 1234

快速的谷歌搜索会显示一些不同的资源,它们比我更详细地解释了这个问题。


19
对我来说它确实起了作用。我喜欢这种方法,比将其粘贴到 git 远程中要好。谢谢!使用这种方式也不需要指定绝对路径。 - Michael van Rooijen
5
把它放在远程比像这样隐藏在配置文件中更好:当你把所有东西放在一个地方时,你永远不会忘记不同的端口号,而且你可以简单地复制和粘贴URL给其他人使用。 - MarcH
1
@MarcH 实际上这取决于情况。我喜欢在我的VPS实例上使用随机端口号。将端口放在配置文件中是一种方法,可以向协作者隐藏该信息(当您有多个远程主机时,部署远程主机与内部源代码存储库不同)。 - Ragunath Jawahar
@RagunathJawahar 我认为使用随机端口号并不是一个非常常见的用例。 - MarcH
这是我认为的最佳答案。 - xCovelus
显示剩余5条评论

42

不必使用ssh://协议前缀,您可以继续使用传统的URL形式来访问通过SSH连接的git仓库,只需要进行一些小修改。提醒一下,传统的URL是:

git@host:path/to/repo.git

如果要指定另一个端口,则需要在user@host部分周围包含方括号,包括端口:

[git@host:port]:path/to/repo.git

但是,如果端口更改只是暂时的,您可以告诉Git使用不同的SSH命令,而无需更改存储库的远程URL:

export GIT_SSH_COMMAND='ssh -p port'
git clone git@host:path/to/repo.git # for instance

7
在 git@host:port 周围加上方括号对于我非常有效。我正在使用 GitLab,在该服务器上需要一个非标准端口,但我也不能使用仓库的绝对路径(我不知道它在哪里)。谢谢。 - Thomas Le
2
这对我来说似乎是最灵活的方法,因为它支持相对路径并且不依赖于ssh配置。 - nixlarfs
1
嗯,应该是GIT_SSH_COMMAND,请查看此链接https://git-scm.com/docs/git。 - pratclot
在使用git remote add添加它作为远程仓库时,我不得不用双引号将URL包含起来,以使该语法生效。就像这样:git remote add gitea "[git@host:port]:path/to/repo.git" - raisinrising
@Konrad Rudolph 那很有道理,谢谢。顺便说一下,我在运行 zsh - raisinrising
显示剩余2条评论

41

最佳答案对我无效。 我需要一开始就有 ssh://

# does not work
git remote set-url origin user@example.com:10000/aaa/bbbb/ccc.git
# work
git remote set-url origin ssh://user@example.com:10000/aaa/bbbb/ccc.git

Debian 10 在另一个 SSH 端口上工作。测试 SSH -T git@github.com 出现错误连接超时。然后,使用 git remote set-url origin git@github.com:22/USER/REPOSITORY.git 设置解决了问题。感谢 Kujiy! - coopeu

19

如果你要编辑./.git/config文件

[remote "external"]                                                                                                                                                                                                                                                            
  url = ssh://evanc@www.foo.com:11720/aaa/bbb/ccc                                                                                                                                                                                                               
  fetch = +refs/heads/*:refs/remotes/external/* 

2
很好。但还有一个问题,如果是子模块的话怎么办?好像不能正常工作。 - m4l490n

7
对于GitLab来说,例如SSH端口是2224,因此:

git remote add ssh://git@192.168.1.100:2224/your_group/your_project.git


5

我曾经遇到连接git服务器的类似问题。

( 我有一个在docker容器中运行的gitea服务器,ssh端口配置为2022,而不是标准的22端口,例如:my-git-server.lan )。

  1. 创建ssh密钥对(静默模式,无需密码)
$ ssh-keygen -q -N '' -b 4096 -f ~/.ssh/mykeyfile

1. 这将创建两个文件:公钥文件mykeyfile.pub和私钥文件mykeyfile,均无扩展名。
2. 显示公钥文件的内容,并将其复制/粘贴到您git服务器上的配置文件中。此操作类似于在Github上添加SSH密钥的方式。
$ cat ~/.ssh/mykeyfile.pub
  1. 将以下内容添加到ssh配置文件中,指定git服务器的主机名、端口和密钥文件。
$ nano ~/.ssh/config
Host my-git-server.lan
  HostName my-git-server.lan
  User git
  Port 2022
  IdentityFile ~/.ssh/mykeyfile

(请注意,用户名始终是 git,无论您在 git 服务器上的实际用户名是什么)

  1. 使用公钥测试与您的 git 服务器的 SSH 连接,并收到成功消息
$ ssh -T git@my-git-server.lan
Hi there, username! You've successfully authenticated with the key named /Users/username/.ssh/mykeyfile.pub

使用-v“详细模式”分析任何错误:

$ ssh -Tvvv git@my-git-server.lan

(注意,用户名始终git

  1. 在本地 git 仓库中指定远程地址 ssh://git@my-git-server.lan:2022/alex/myproject.git(再次注意用户为git,端口为2022),检查远程配置。
$ cd your/local/git/repository/folder
$ git remote add my-git-server ssh://git@my-git-server.lan:2022/alex/myproject.git
$ git remote -v

(在这里你也可以看到,在我的git服务器上,我的实际用户是alex,存储库是myproject)

完成!现在你可以在你的git服务器上工作了...拉取/提交/推送等操作。

(这是我在serverfault.com上发布的一篇文章的副本)


更新:正如评论中所指出的那样 - 您不一定需要在远程URL中指定端口2022,因为它已经在~/.ssh/config文件中配置为PORT 2022


1
谢谢,这很好用。只有一件小事,我不需要将端口添加到远程URL中。只需在~/.ssh/config中创建主机,它就会自动使用那里指定的端口。 - sebasira

0

看一下如何正确设置你的~/.ssh/config文件。

你可以轻松地为不同的主机指定不同的设置。

要解决你的问题,你需要设置:

Host github.com 
Port 22 
Host * 
Port 1234

请查看ssh_config手册页面,前几页就能解释你需要了解的一切。


-1

1. git remote add ${shortname} ${url}

2. git remote remove shortname (删除远程仓库)

3. git remote -v (查看当前远程仓库列表)

4. git push remote branch

5. git remote rename A B (将A重命名为B)

6. git remote show shortname (显示远程仓库信息)

这些对我都有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接