【问题标题】:git remote add with other SSH portgit remote add 与其他 SSH 端口
【发布时间】:2011-04-05 12:08:54
【问题描述】:

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

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

【问题讨论】:

    标签: git ssh port


    【解决方案1】:

    尝试连接到我的 git 服务器时遇到类似问题

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

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

    (这将创建两个文件:私钥mykeyfile 和公钥mykeyfile.pub

    1. 显示公钥的内容并将其复制/粘贴到您的 git 服务器中的配置文件的 SSH 密钥(类似于您在 Github 上的操作)
    $ cat ~/.ssh/mykeyfile.pub
    
    1. 在 ssh-config 中添加以下行以指定 git-server 的主机名、端口和密钥文件
    $ nano ~/.ssh/config
    Host my-git-server.lan
      HostName my-git-server.lan
      User git
      Port 2022
      IdentityFile ~/.ssh/mykeyfile
    

    (请注意,用户名是always git,无论您在 git-server 上的实际用户名如何)

    1. 使用公钥测试与您的 git 服务器的 ssh 连接,.. 并收到成功消息
    $ ssh -T git@my-git-server.lan
    

    (再次注意,用户名是always 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-server 上,我的实际用户是 alex 而存储库是 myproject

    完成!您现在可以使用您的 git-server .. fetch/commit/push 等。

    (这是我在serverfault.com上的帖子的副本)

    【讨论】:

      【解决方案2】:

      对于 gitlab,示例 ssh 端口是 2224,因此:

      git 远程添加 ssh://git@192.168.1.100:2224/your_group/your_project.git

      【讨论】:

        【解决方案3】:

        1.git 远程添加 ${shortname} ${url}

        2.git remote remove 短名称(是删除远程)

        3.git remote -v(就是查看你当前的远程列表)

        4.git 推送远程分支

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

        6.git remote show 短名称(显示远程信息)

        这一切都适合我。

        【讨论】:

          【解决方案4】:

          除了使用 ssh:// 协议前缀外,您还可以继续使用传统的 URL 表单通过 SSH 访问 git,只需稍作改动。提醒一下,the conventional URL is

          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
          

          【讨论】:

          • 在 git@host:port 周围添加方括号对我来说效果很好。我正在使用 gitlab,在该服务器上它需要一个非标准端口,但我也不能使用 repo 的绝对路径(我不知道)。谢谢
          • 这对我来说似乎是最灵活的方法,因为它支持相对路径并且不依赖 ssh 配置
          • 嗯,这是 GIT_SSH_COMMAND,看看这个git-scm.com/docs/git
          • 在使用git remote add 将其添加为远程时,我必须将 URL 用双引号括起来才能使此语法正常工作。像这样:git remote add gitea "[git@host:port]:path/to/repo.git"
          • @raisinrising 这与 Git 无关,取决于您使用的 shell。对于 sh/Bash/... 引号在此处不需要
          【解决方案5】:

          你可以这样做:

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

          1234 是正在使用的 ssh 端口

          【讨论】:

          • 谢谢。只是一个补充:在路径部分,使用绝对路径,而不是用户主目录的相对路径...
          • @Snicolas:为什么不使用相对路径?
          • @Sincolas 如果您在用户主目录中有 repo,它就可以工作:/home/someuser/git-repos/example.git --> ssh: //someuser@:/~/git-repos/example.git 。顺便说一句:您通过 git clone --bare 获得一个 .git 存储库
          • @Jameo 它绝对路径。
          • 请注意,如果您删除协议,它将不起作用。即,如果您尝试以下操作,它将不起作用。 git remote add origin user@host:1234/srv/git/example
          【解决方案6】:

          最佳答案对我不起作用。我从一开始就需要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 得到错误连接超时。然后这个 setup git remote set-url origin git@github.com:22/USER/REPOSITORY.git 解决了这个问题。谢谢库吉!
          【解决方案7】:

          对于那些编辑./.git/config的人

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

          【讨论】:

          • 完美。但是有一个问题,我该如何为子模块做到这一点?它似乎不起作用。
          【解决方案8】:

          您需要编辑您的 ~/.ssh/config 文件。添加如下内容:

          Host example.com
              Port 1234
          

          快速谷歌搜索显示fewdifferent 资源比我解释得更详细。

          【讨论】:

          • 它确实对我有用。我更喜欢这种方法,而不是把它放在 git 遥控器中。谢谢!这种方式也不需要指定绝对路径。
          • 这很好用。同样,我可以有一个特定的密钥而不是默认的 id_rsa。不仅如此,我的服务器很挑剔,或多或少你必须足够快地拥有它,如果你包含密码就会失败。所以我也使用PasswordAuthentication no
          • 把它放在远程比把它藏在配置文件里更好:当你把所有东西都放在一个地方时,你永远不会忘记不同的端口号,你可以简单地复制和粘贴供其他人使用的 URL。
          • @MarcH 这实际上取决于情况。我喜欢在我的 VPS 实例上使用随机端口号。将端口包含在配置文件中是一种向协作者隐瞒该信息的方法(即当您有多个遥控器时,部署远程主机与内部源代码存储库不同)。
          • @RagunathJawahar 我不认为使用随机端口号是一个非常常见的用例。
          猜你喜欢
          • 1970-01-01
          • 2011-06-18
          • 2023-02-02
          • 2021-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-20
          相关资源
          最近更新 更多