不能使用带有dockerized Gitlab的ssh

时间:2018-05-28 01:37:54

标签: docker ssh gitlab

我在centos 7上使用docker安装了最新的gitlab

select  /*+ BROADCAST (B) */ a.colum1 FROM   completedata  INNER JOIN (select column 2 from completedata2) B 

我还将主机ssh端口更改为10022,让gitlab使用端口22。 Gitlab成功了。克隆使用http工作,但在使用ssh时失败。

docker run -d --hostname git.xxxx.com \
-p 8082:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab:Z \
-v /srv/gitlab/logs:/var/log/gitlab:Z \
-v /srv/gitlab/data:/var/opt/gitlab:Z \
gitlab/gitlab-ce:latest

检查Gitlab状态的输出:

git clone git@git.xxxx.com:yphc/dt-dd-miniprogram.git

Cloning into 'dt-dd-miniprogram'...
ssh: connect to host git.xxxx.com port 22: Bad file number
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

警告:sshd:无法打开监督/确定:拒绝访问

我在gitlab容器中尝试了ssh命令。我还在防火墙上添加了端口22。

root@git:/# gitlab-ctl status
run: gitaly: (pid 472) 241405s; run: log: (pid 467) 241405s
run: gitlab-monitor: (pid 474) 241405s; run: log: (pid 465) 241405s
run: gitlab-workhorse: (pid 471) 241405s; run: log: (pid 464) 241405s
run: logrotate: (pid 15611) 203s; run: log: (pid 456) 241405s
run: nginx: (pid 475) 241405s; run: log: (pid 469) 241405s
run: node-exporter: (pid 460) 241406s; run: log: (pid 459) 241406s
run: postgres-exporter: (pid 453) 241406s; run: log: (pid 452) 241406s
run: postgresql: (pid 470) 241406s; run: log: (pid 463) 241406s
run: prometheus: (pid 482) 241406s; run: log: (pid 476) 241406s
run: redis: (pid 396) 241408s; run: log: (pid 395) 241408s
run: redis-exporter: (pid 455) 241406s; run: log: (pid 454) 241406s
run: sidekiq: (pid 473) 241406s; run: log: (pid 468) 241406s
warning: sshd: unable to open supervise/ok: access denied
run: unicorn: (pid 466) 241406s; run: log: (pid 458) 241406s

当我关闭防火墙时,它说

[root@localhost zones]# firewall-cmd --list-all 
    public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: ssh dhcpv6-client
  ports: 2022/tcp 10022/tcp 22/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

我在网上浏览了很长时间但找不到任何东西。如果有任何帮助或想法如何解决这个问题,我将不胜感激。

3 个答案:

答案 0 :(得分:0)

从kvm迁移后,我遇到了与gitlab-ce官方docker镜像相同的情况。

root@gitlab:/opt/gitlab# /opt/gitlab/embedded/bin/sv start sshd
warning: sshd: unable to open supervise/ok: access denied

我发现此sv会产生错误:

root@gitlab:/opt/gitlab# /opt/gitlab/embedded/bin/sv start sshd
warning: sshd: unable to open supervise/ok: access denied

因为/ opt / gitlab / sv / sshd / supervise / ok管道不可用于root用户:

root@gitlab:/opt/gitlab/sv/sshd/supervise# cat ok
cat: ok: Permission denied

作为测试,我已使用777权限对其进行了更新,但仍然没有运气

root@gitlab:/opt/gitlab/# /opt/gitlab/embedded/bin/sv start sshd
fail: sshd: runsv not running

我使用的解决方法是在基于gitlab-ce:latest:的Dockerfile中

RUN sed -i '/gitlab-ctl reconfigure/a service ssh start' /assets/wrapper

这将启动ssh,现在我可以通过ssh与git用户连接以进行推拉:)

不要忘记,您需要为要使用的端口https://docs.gitlab.com/omnibus/docker/设置适当的环境

  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.m31.com:3080'
      gitlab_rails['gitlab_shell_ssh_port'] = 3022

所以现在一切正常,但是请记住,这是一个奇怪/丑陋的解决方法,我敢肯定有一种更好的方法可以完成这项工作。

答案 1 :(得分:0)

我在另一个centos 7上做同样的事情,一切正常,所以我猜操作系统有一些错误,gitlab docker是可以的,但是到目前为止我找不到它

答案 2 :(得分:0)

使两台服务器在同一主机上使用同一端口22的最简单方法是将它们绑定到单独的IP地址。默认情况下,gitlabsshd都绑定到0.0.0.0,因此在所有地址和接口上保留该端口。

托管提供商可以为您的计算机分配其他公共IP地址,它们应在主机上的ifconfig中注册。

您的本地ssh服务器应绑定到您的主IP地址。在/etc/ssh/sshd_config中查找

ListenAddress 0.0.0.0

Docker可以使用-p <secondary_ip>:22:22

移植到特定的ip。

您可以为子IP设置子域,例如git.example.com,为主IP设置server.example.com