首页 文章

将git用户的sshd向前登录到(GitLab)Docker容器

提问于
浏览
7

我想在我的主机上配置sshd,以将某个用户的公钥登录转发到运行自己的sshd服务的Docker容器 .

为了给出一些上下文,我让GitLab在Docker容器中运行,我不喜欢在主机上打开另一个端口进行SSH GitLab通信,而是让主机上的sshd重定向用户并直接键入GitLab在本地暴露的端口机 .

我的想法是做这样的事情:

Match User git
  ForceCommand ssh -p <GitLab port> <some arguments that forward to> git@localhost
  ...

非常感谢帮助!

4 回答

  • 8

    我发现了一个简单的解决方法 . 只需在主机上创建一个Git用户,并提供一个代理脚本,该脚本使用主机的SSH守护程序和容器卷中的 .ssh/authorized_keys 在GitLab容器中执行给定的Git命令 .

    • 在主机上,使用与GitLab泊坞窗容器(998)中相同的UID和GID添加用户 git ,并将GitLab data 目录设置为用户的主目录:
    useradd -u 998 -s /bin/bash -d /your/gitlab/path/data git
    
    • git 用户添加到泊坞窗组
    usermod -G docker git
    
    • 在主机上添加代理脚本 /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell ,内容如下:
    #!/bin/bash
    docker exec -i -u git <your_gitlab_container_id> sh -c "SSH_CONNECTION='$SSH_CONNECTION' SSH_ORIGINAL_COMMAND='$SSH_ORIGINAL_COMMAND' $0 $1"
    
  • 1

    您提出的建议将使用户需要进行两次身份验证 . 一次使用你的服务器,第二次使用docker中的gitlab,这基本上是你不想要的东西 .

    当您提到公钥认证时,需要以某种方式与您的主机共享gitlab中的授权密钥文件或命令 .

    我相信它是可能的,但更容易打开那个端口 .

    从客户端,你可以像_2405596这样做:

    Hostname your-gitlab
      ProxyCommand ssh -W localhost:<GitLab port> git@your-git-host
    
  • 0

    另一种(未经测试的)可能是您将连接从主机转发到容器中,方法是将其添加到git用户的authorized_keys文件中:

    command="nc -q0 gitlab 22" ssh-rsa AAAAB....[REST OF YOUR PUBKEY]
    

    应该在主机上创建git用户 . 现在当你用“ssh git @ host”连接时,这个连接应该用“nc”转发到gitlab容器 .

    显然,还需要将所有gitlab ssh密钥与命令前缀一起复制到主机

    但是,只有当gitlab容器在隔离网络中为 not 并且主机容器实际上有可能连接到gitlab端口22时,这才有效 .

    在我的设置中,这不起作用,因为gitlab是在一个隔离的网络中,所以我最终在另一个端口上运行gitlab ssh:

    • -p 20022:22 启动容器

    • gitlab_rails['gitlab_shell_ssh_port'] = 20022 添加到您的gitlab.rb配置中

  • 0

    我正试图将我的git repos通过我的主机推入docker机器 . 我使用ForceCommand选项玩了一点 . 这对我有用;)

    Match User git
      ForceCommand ssh git@localhost -p 9022 $SSH_ORIGINAL_COMMAND
    

相关问题