天道酬勤,学无止境

具有非标准 SSH 端口的 Gitlab(在具有 Iptable 转发的 VM 上)(Gitlab with non-standard SSH port (on VM with Iptable forwarding))

问题

我的gitlab位于主机服务器上的虚拟机上。 我使用非标准 SSH 端口(即766 )到达 VM,然后 iptable 规则从host:766转发到vm:22

所以当我创建一个新的 repo 时,添加远程的指令提供了一个格式错误的 URL(因为它不使用766端口。例如,Web 界面给了我这个:

畸形

git remote add origin git@git.domain.com:group/project.git

而不是在组之前包含:766/的 URL。

格式良好

git remote add origin git@git.domain.com:766/group/project.git

所以当我创建一个 repo 时,我必须手动进行修改,我的合作者也是如此。 我该如何解决?

回答1

如果您在 config/gitlab.yml 中正确配置了 ssh_port,网页将显示正确的 repo url。

## GitLab Shell settings
gitlab_shell:
  ...
  # If you use non-standard ssh port you need to specify it
  ssh_port: 766

附: 正确的网址是:ssh://git@git.domain.com:766/group/project.git

编辑:更改后您需要清除缓存等:

bundle exec rake cache:clear assets:clean assets:precompile RAILS_ENV=production
回答2

在 Omnibus 打包版本中,您可以在/etc/gitlab/gitlab.rb文件中修改该属性:

gitlab_rails['gitlab_shell_ssh_port'] = 766

然后,您需要重新配置 GitLab:

# gitlab-ctl reconfigure

然后,您的 URI 将在 Web 界面中正确显示为ssh://git@git.domain.com:766/group/project.git

回答3

注意:这是在旧的 Giltab 版本 ( v5 - v6 ) 上测试的,可能不适合现代实例。

您可以在两步过程中实现类似的行为:

1. 编辑: config/gitlab.yml

在服务器上,将端口设置为您使用的端口:

ssh_port: 766

2. 编辑~/.ssh/config

在您的机器上,添加以下与您的 gitlab 相对应的部分:

Host sub.domain.com
        Port 766

限制

您将需要在每个用户的计算机上重复此操作...

参考

  • GitLab 和一个非标准的 SSH 端口

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 具有非标准端口的GitLab远程存储库(GitLab remote repository with a non standard port)
    问题 我有以下错误: ssh: connect to host git.limeworks.eu port 22: Connection refused fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 现在,我在本地.ssh / config文件中的配置是: host limeworks user git port 6565 hostname git.limeworks.eu; 并在远程gitlab.yml中: gitlab: ## Web server settings host: git.limeworks.eu port: 6565 另外,这是nginx设置(/ sites-enabled / gitlab): server { listen 80; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea server_name git.limeworks.eu; # e.g., server_name source.example.com; ... 每次修改后,我都重新启动了gitlab和nginx服务
  • Gitlab with non-standard SSH port (on VM with Iptable forwarding)
    My gitlab is on a virtual machine on a host server. I reach the VM with a non-standard SSH port (i.e. 766) which an iptable rule then forward from host:766 to vm:22. So when I create a new repo, the instruction to add a remote provide a mal-formed URL (as it doesn't use the 766 port. For instance, the web interface give me this: Malformed git remote add origin git@git.domain.com:group/project.git Instead of an URL containing :766/ before the group. Wellformed git remote add origin git@git.domain.com:766/group/project.git So it time I create a repo, I have to do the modification manually, same
  • Git推/拉在Google Compute Engine的GitLab上失败(Git push/pull fails on GitLab in Google Compute Engine)
    问题 我已经在项目界面中使用“单击部署”在Google Compute Engine上安装了GitLab。 几分钟后,部署成功。 我可以通过SSH进入实例,然后按预期进行处理。 我还可以使用Web界面登录到GitLab,并将SSH密钥添加到我的配置文件中。 到现在为止还挺好。 但是,当我尝试推送或拉到新的示例存储库时,收到以下消息: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 我已经删除了本地SSH配置,因此不会造成干扰。 我需要设置某种SSH隧道吗? 我想念什么? 更新:清除本地〜/ .ssh文件夹,并重新生成SSH密钥(已将其添加到GitLab中的配置文件中)会产生以下错误: Received disconnect from {GITLAB_IP_ADDRESS}: 2: Too many authentication failures for git fatal: Could not read from remote repository. Please
  • 使用具有非标准端口的远程存储库(Using a remote repository with non-standard port)
    问题 我正在为远程存储库设置本地git项目。 远程存储库正在非标准端口上提供(4019)。 但这是行不通的。 相反,我收到以下错误消息: ssh: connect to host git.host.de:4019 port 22: Connection refused fatal: The remote end hung up unexpectedly error: failed to push to 'ssh://root@git.host.de:4019/var/cache/git/project.git' 我的本地git配置如下: [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = ssh://root@git.host.de:4019/var/cache/git/project.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master (端口和主机是实际端口和主机的占位符。) 我的git配置有什么问题? 回答1 如果在.ssh
  • GitLab git用户密码(GitLab git user password)
    问题 我刚刚安装了GitLab。 我创建了一个名为project-x的项目。 我已经创建了几个用户并将其分配给该项目。 现在我尝试克隆: git clone git@192.168.0.108:project-x.git 它提示我输入密码。 我应该使用什么密码? 回答1 它提示我输入密码。 不应该这样如果您具有代表有权访问project-x的用户的正确公钥/私钥,则gitlab不会要求您任何东西。 但这假设ssh -vT git@192.168.0.108首先工作。 回答2 与当前方案不严格相关。 有时,当系统提示您输入密码时,是因为您添加了错误的*原始格式(HTTPS而不是SSH) HTTP(S)协议通常用于具有强大用户名和密码的公共存储库 SSH身份验证在内部项目中更为常见,在内部项目中,您可以使用ssh-key-file和简单的密码短语进行身份验证 GitLab用户更有可能使用SSH协议 使用查看您的远程信息 git remote -v 如果看到HTTP(S)地址,这是将其更改为SSH的命令: git remote set-url origin git@gitlab.my_domain.com/example-project.git 回答3 来自https://github.com/gitlabhq/gitlab-shell/issues/46的解决方案为我工作。
  • docker学习之旅
    vagrant,docker-machine,dockerfile,docker bridge,overlay,underlay,dockercompose,docker swarm,UCP,DTR,kubernetes(k8s),heapster,grafana,influxdb,ELK+Fluentd,prometheus,git,CICD以上是接下来,我们更新的关键字,有兴趣的可以持续关注。number onevagrant(www.vagrantup.com+virtualbox) 为了能够初始化统一的docker linux虚拟机,我们可以使用vagrant file 使用命令 vagrant init centos/7 vagrant up(建议本地下载镜像) ,vagrant ssh(进入镜像) ,vagrant status,vagrant halt,vagrant destroy,从https://app.vagrantup.com/ubuntu/boxes/xenial64等下载vagrantfile+初始化docker命令as followed:# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.require_version ">= 1.6.0"boxes = [ { :name => "docker-host",
  • 有没有办法让非根进程绑定到Linux上的“特权”端口?(Is there a way for non-root processes to bind to “privileged” ports on Linux?)
    问题 当我之外再也没有其他用户时,在我的开发箱上有这个限制是很烦人的。 我知道标准的解决方法,但是它们都不能完全满足我的要求: authbind(Debian测试版1.0版仅支持IPv4) 使用iptables REDIRECT目标将低端口重定向到高端口(iptable的IPv6版本ip6tables尚未实现“ nat”表) sudo(以root身份运行是我要避免的操作) SELinux(或类似版本)。 (这只是我的开发箱,我不想引入很多额外的复杂性。) 是否有一些简单的sysctl变量允许非根进程绑定到Linux上的“特权”端口(端口小于1024),还是我不走运? 编辑:在某些情况下,您可以使用功能来做到这一点。 回答1 好的,感谢那些指出功能系统和CAP_NET_BIND_SERVICE功能的人。 如果您使用的是最新内核,则确实可以使用它以非root用户身份启动服务,但绑定低端口。 简短的答案是您可以这样做: setcap 'cap_net_bind_service=+ep' /path/to/program 然后,此后任何时候执行program ,它都将具有CAP_NET_BIND_SERVICE功能。 setcap在debian软件包libcap2-bin 。 现在需要注意的是: 您将至少需要2.6.24内核如果您的文件是脚本,则此方法将无效。 (即,使用#!行启动解释器)
  • Bitnami GitLab 5.0和git&Eclipse EGit快速入门(Bitnami GitLab 5.0 and git & Eclipse EGit quick start)
    问题 我们刚刚使用Bitnami堆栈设置了GitLab 5.0,需要快速入门。 默认情况下,Bitnami禁用SSH。 没关系,我更喜欢使用HTTP。 但是,似乎GitLab 5.0不能顺利支持HTTP。 例如,在项目页面http://192.168.133.99/gitlab/publicproject1 ,当切换到HTTP选项时,下面的帮助不会更新。 我有一个项目publicproject1被检查为public。 但是我无法以任何方式克隆它(使用git或EGit): weibl@FX-JSJ532 ~/pp1 $ git clone http://192.168.133.99/gitlab/publicproject1.git Cloning into 'publicproject1'... fatal: http://192.168.133.99/gitlab/publicproject1.git/info/refs not found: did you run git update-s erver-info on the server? weibl@FX-JSJ532 ~/pp1 $ git clone http://192.168.133.99/gitlab/publicproject1 Cloning into 'publicproject1'... fatal
  • Vagrant反向端口转发?(Vagrant reverse port forwarding?)
    问题 我正在研究 Web 服务架构。 我有一些软件需要在本机主机上运行,​​而不是在 Vagrant 中运行。 但是我想在来宾上运行一些客户端服务。 Vagrant 的config.vm.forwarded_port参数会在主机上打开一个端口,并将数据发送给来宾。 但是如何在来宾上打开端口并将数据发送到主机? (它仍然是端口转发,但方向相反。) 回答1 当你运行vagrant ssh ,它实际上是在使用这个底层命令: ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1 SSH 支持使用-R guestport:host:hostport选项以您想要的方向转发端口。 因此,如果您想连接到来宾上的端口12345并将其转发到localhost:80 ,则可以使用以下命令: ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o
  • Git分支及其协同开发
    Git分支及其协同开发目录Git分支Git是如何保存数据的Git分支的本质Git分支的操作远程仓库与本地仓库分支开发一个项目多个远程仓库远程仓库操作命令协同开发Git flow工作流GitLub安装搭建CentOS7防火墙设置使用GitLub结束语Git分支Git鼓励在工作流程中频繁的使用分支与合并,哪怕一天之内进行很多次1:Git的必杀技特性:分支模型2:Git分支处理非常的轻量级,可以瞬间完成新建分支3:分支切换比较快捷方便4:分支是Git强大独特的地方想要很好的理解Git分支,需要先理解Git是如何保存数据的Git是如何保存数据的上一篇文章中说到,Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。1:git add暂存的操作步骤1:通过SHA-1哈希算法为每个文件计算校验和,校验和和文件名是一一对应的2:使用blob对象将当前版本的文件快照保存到Git仓库中3:将检验和信息加入到暂存区域等待提交操作检验和:长度为40的SHA-1值字符串首先通过git add把文件加入到暂存区域然后通过git ls-files查看暂存区域中有哪些文件,然后再通过git ls-files -s -- a.txt或者使用git ls-files -s查看文件对应的blob对象通过git cat-file -p 对应的检验和值 可以查看文件中的内容文件快照
  • 在Docker容器中使用SSH密钥(Using SSH keys inside docker container)
    问题 我有一个应用程序可以使用Git执行各种有趣的操作(例如运行git clone和git push),而我正在尝试对其进行docker-ize。 我遇到了一个问题,尽管我需要能够在容器中添加SSH密钥以供容器“用户”使用。 我尝试将其复制到/root/.ssh/ ,更改$HOME ,创建了一个git ssh包装器,但还是没有运气。 这是Dockerfile供参考: #DOCKER-VERSION 0.3.4 from ubuntu:12.04 RUN apt-get update RUN apt-get install python-software-properties python g++ make git-core openssh-server -y RUN add-apt-repository ppa:chris-lea/node.js RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install nodejs -y ADD . /src ADD ../../home/ubuntu/.ssh/id_rsa /root/.ssh/id_rsa RUN cd /src; npm
  • ssh:连接到主机github.com端口22:连接超时(ssh: connect to host github.com port 22: Connection timed out)
    问题 我在代理下,并且在相当长一段时间内成功推动git。 现在,我无法一下子推入git。 我已经设置了RSA密钥和代理,并仔细检查了它们,但无济于事,git向我抛出了页面标题中显示的错误。 回答1 就我而言,建议的解决方案均无效,因此我尝试自己修复此问题,并解决了该问题。 对我来说,我在我的AWS EC2 UBUNTU实例上遇到此错误,解决该问题的方法是编辑ssh配置(如果不存在,则添加它)。 sudo nano ~/.ssh/config 我添加了以下内容 Host github.com Hostname ssh.github.com Port 443 然后,运行命令ssh -T git@github.com确认问题是否已解决。 根据这个 有时,防火墙拒绝完全允许SSH连接。 如果不能将HTTPS克隆与凭据缓存一起使用,则可以尝试使用通过HTTPS端口建立的SSH连接进行克隆。 大多数防火墙规则都应允许这样做,但是代理服务器可能会干扰 希望这可以帮助其他遇到与我一样的问题的人。 回答2 原因可能是您在网络中时对防火墙的修改(在这种情况下,它们可能会故意阻止某些端口) 仔细检查这是否是原因... ssh -T git@github.com 这应该超时。 如果是这种情况,请使用http协议而不是ssh这样只需将配置文件中的url更改为http。 这是怎么做的:- git config
  • Jenkins 日常运维笔记 - 主目录/主备模式/迁移/job覆盖/maven构建/日志处理
    之前已在机房部署了一套Jenkins环境,先需要将此套环境迁移到别处,对迁移过程中的一些细节以及日常维护做了如下记录:一、Jenkins主目录设置1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中。如jenkins使用root用户启动,则主目录为/root/.jenkins [root@code-server ~]# ll -d /root/.jenkins/ drwxr-x--- 14 root root 4096 Dec 18 15:22 /root/.jenkins/ 2)可以在系统环境变量里手动设置jenkins的主目录,这样启动jenkins后,jenkins数据就会写入到手动设置的主目录里。 root用户可以在/etc/profile文件里设置 [root@jenkins01 ~]# vim /etc/profile ...... JENKINS_HOME="/data/jenkins" export JENKINS_HOME [root@jenkins01 ~]# source /etc/profile =========================================================== 如果是非root用户,就在用户家目录的.bashrc文件里设置 [app@jenkins01 ~]$ vim
  • Git错误:“请确保您具有正确的访问权限,并且存储库存在”(Git error: “Please make sure you have the correct access rights and the repository exists”)
    问题 我在Windows上使用TortoiseGit。 当我尝试从标准Windows资源管理器的上下文菜单中克隆时,出现以下错误: 请确保您具有正确的访问权限,并且存储库存在 更准确地说,终端的快照如下: git.exe克隆--progress -v“ git @ arobotdev:\ git \ AlfaRobot.git”“ C:\ Work \ AlfaRobot” 克隆到“ C:\ Work \ AlfaRobot” ... 权限被拒绝,请重试。 权限被拒绝,请重试。 权限被拒绝(公钥,密码)。 致命:无法从远程存储库读取。 请确保您具有正确的访问权限并且该存储库存在。 git没有干净退出(退出代码128)(21450 ms @ 19.09.2014 10:36:58) 我应该怎么做才能使git正常工作? 回答1 您的git URL可能已更改。 使用以下命令更改本地目录中的URL 适用于https协议 git remote set-url origin https://github.com/username/repository.git 用于ssh协议 git remote set-url origin git@github.com:username/repository.git 回答2 这个问题可能是您的ssh-agent出现的问题,您的ssh密钥尚未与ssh
  • git:致命的:无法从远程存储库读取(git: fatal: Could not read from remote repository)
    问题 我正在尝试使用http://danielmiessler.com/study/git/#website设置git来管理我的网站。 我已经到达指示的最后一步:git push website + master:refs / heads / master 我正在使用Win7中的git ming32命令行 $ git push website +master:refs/heads/master Bill@***.com's password: Connection closed by 198.91.80.3 fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 这里的一个问题可能是该程序正在寻找Bill@***.com。 当我通过ssh连接到我的网站时,我使用了另一个用户名(可以说“ abc”)。 所以也许应该是abc@***.com。 如果是这样,我不知道如何更改此设置,或者我是否可以使用别名进行推送 回答1 您可以指定SSH应该作为远程URL的一部分发送到远程系统的用户名。 在远程主机名前放置用户名,后跟@ 。 git remote set-url website abc@***
  • 从gitlab私有存储库安装npm模块(Install npm module from gitlab private repository)
    问题 我们正在将GitLab用于我们的私人项目。 有一些来自github的分叉库,我们想将其安装为npm模块。 可以直接从npm安装该模块,例如: npm install git://github.com/FredyC/grunt-stylus-sprite.git ...也可以正常工作,但是对GitLab进行同样的操作,只是更改域会收到此错误。 npm WARN `git config --get remote.origin.url` returned wrong result (git://git.domain.com/library/grunt-stylus-sprite.git) npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git Cloning into bare repository 'D:\users\Fredy\AppData\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-sprite-git-6f33bc59'... npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git fatal
  • Git在错误的位置寻找我的SSH密钥(Git looking for my SSH key in the wrong location)
    问题 尝试撤消Gitlab中保存的存储库时,我一直有些头疼。 如果有帮助的话,这些都可以在Windows 8.1上的Ubuntu VM上完成。 我已经在Gitlab中添加了我的公钥,并将我的私钥添加到了ssh-agent中……一切似乎都是正确的。 当我尝试执行git pull时,这就是我遇到问题的地方。 在我看来,Git只是在错误的位置查找,我的私钥存储在c / Users / Neil / .ssh中,但好像git在c / Users / Neil / .ssh / 342/200 /中查找217 ... C:\Users\Neil\code\homestead>git pull no such identity: /c/Users/Neil/.ssh/id_rsa\342\200\217: No such file or directory git@git.mgmt.local's password: 我不知道为什么git会在那里找我,或者我对此有错吗? 谁能为我阐明一些事情? 回答1 GitLab本身并不在寻找ssh密钥:作为客户端,您正在使用ssh与GitLab联系,这意味着只有openssh在寻找这些密钥。 它(openssh)将在以下位置找到它们: %HOME%\.ssh (因此请检查环境变量HOME设置为什么) %HOME%\.ssh\config
  • 使用Laravel Homestead将无业游民的端口转发80到8000(Vagrant port forwarding 80 to 8000 with Laravel Homestead)
    问题 我的问题: 我只能通过端口8000访问我的站点,但不能通过80访问,这使我认为它没有像应有的那样将80重定向到8000。 我只想在浏览器中键入local.kujif.com即可加载该站点,默认情况下,该站点读取的端口为80。 我正在使用curl检查它,它返回: curl 'http://local.kujif.com' curl: (7) Failed connect to local.kujif.com:80; No error 但是,如果我在网址中添加:8000,那么它可以工作; 它返回我的index.php,它仅显示“ test”: curl 'http://local.kujif.com:8000' test 我的细节: 我正在将Laravel Homestead和Vagrant与Oracle VM VirtualBox一起使用。 在Homestead.rb中,它具有端口转发功能。 我根本没有编辑它: config.vm.network "forwarded_port", guest: 80, host: 8000 config.vm.network "forwarded_port", guest: 3306, host: 33060 config.vm.network "forwarded_port", guest: 5432, host: 54320
  • 通过SSH本地端口转发的JConsole(JConsole over ssh local port forwarding)
    问题 我希望能够远程连接到公开了JMX的Java服务,但是该服务已被防火墙阻止。 我尝试使用ssh本地端口转发,但是连接失败。 看一下wireshark,看来当您尝试与jconsole连接时,它想在连接到端口9999之后被一些短暂的端口连接,该端口已被防火墙阻止。 有什么方法可以使jconsole仅通过9999连接或使用代理? 这篇文章仍然是最好的解决方案吗? 还是我错过了什么? 回答1 有什么方法可以使jconsole仅通过9999连接或使用代理? 这篇文章仍然是最好的解决方案吗? 还是我错过了什么? 是的,那篇文章是对的。 如果指定服务器上的JMX端口( -Dcom.sun.management.jmxremote.port=#### ),你实际上仅指定的注册表端口的应用程序。 连接时,它提供了一个额外的服务器端口,jconsole实际上可以完成其所有工作。 若要转发给工作,你需要知道这两个注册表和服务器端口。 在将注册表和服务器端口都设置为8000的情况下,运行以下应用程序应该可以运行您的应用程序。有关更多详细信息,请参见此处。 -Dcom.sun.management.jmxremote.port=8000 -Dcom.sun.management.jmxremote.rmi.port=8000 -Djava.rmi.server.hostname=127.0.0.1
  • 如何为远程计算机开发和本地设备部署设置ADB(How to set up ADB for remote machine development and local device deployment)
    问题 我的情况是这样的:我在家办公,并通过Windows远程桌面登录到我的工作机中。 我将Eclipse用作工作计算机上Android应用程序的开发环境。 使用ADB,我希望能够将应用程序从工作计算机部署到家庭网络中的设备上,以防模拟器无法实现应用程序公正性的情况。 我发现这篇文章讨论了非常相似的场景,只是部署到在本地PC上运行的仿真器,而不是部署到本地设备: http://www.41post.com/5003/programming/android-adb-remote-emulator-access 我正在尝试采取相同的步骤,但要弄清楚如何在家庭WiFi网络上定位本地设备,并如何将其绑定到本地家用PC而不是本地仿真器。 现在,我已经设置了远程PC尝试在端口5585上连接到我的公共路由器IP-但是在我的路由器中,我将该IP /端口转发给哪个IP /端口以连接到本地设备? 在使用仿真器的示例中,它们转发到运行仿真器的本地PC地址和端口5555,并且adb在本地PC上未运行。 我已将路由器配置为通过WiFi上的设备以及与设备绑定的本地PC IP转发到我的设备IP。 但是,在这两种情况下,当我在远程PC上尝试adb connect <routerIP>:5585时,它都给我一个错误, unable to connect to <routerIP>:5585:5585 。 尝试转发