sshd将git用户的login信息转发到(GitLab)Docker容器
我想在我的主机上configurationsshd,将某个用户的公钥login转发到一个运行自己的sshd服务的Docker容器。
为了给出一些上下文,我让GitLab在一个Docker容器中运行,并且我不喜欢在主机上打开另一个用于SSH GitLab通信的端口,而是在主机上使用sshdredirect用户,直接键入GitLab在本地公开的端口机。
我的想法是做这样的事情:
Match User git ForceCommand ssh -p <GitLab port> <some arguments that forward to> git@localhost ...
非常感谢帮助!
我find了一个简单的解决方法。 只需在主机上创build一个Git用户,并提供一个代理脚本,它使用主机的SSH守护进程和容器卷中的.ssh/authorized_keys
在GitLab容器中执行给定的Git命令。
-
在主机上,使用与GitLab docker容器(998)中相同的UID&GID添加用户
git
,并将GitLabdata
目录设置为用户的home:useradd -u 998 -s /bin/bash -d /your/gitlab/path/data git
-
将
git
用户添加到docker组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"
你提出的build议会使用户需要两次validation。 一次与你的服务器,第二次在docker,这基本上是你不想要的gitlab。
当你提到公钥authentication时,它需要以某种方式与你的主机共享你的gitlab的授权密钥文件或命令。
我相信这是可能的,但更容易打开那个港口。
从客户端,你可以像ProxyCommand
这样做:
Hostname your-gitlab ProxyCommand ssh -W localhost:<GitLab port> git@your-git-host
另一个(未经testing的)可能性可能是您将连接从主机转发到容器,方法是将其添加到git用户的authorized_keys文件中,如下所示:
command="nc -q0 gitlab 22" ssh-rsa AAAAB....[REST OF YOUR PUBKEY]
git用户应该在主机上创build。 现在当你连接“ssh git @ host”时,这个连接应该用“nc”转发给gitlab容器。
很明显,还需要将所有使用命令前缀复制的gitlab ssh密钥复制到主机
然而,这只有在gitlab容器不在隔离networking中并且主容器实际上具有连接到gitlab端口22的可能性时才起作用。
在我的设置中,这是因为gitlab是在一个孤立的networking,所以我结束了在另一个端口上运行gitlab ssh:
- 用
-p 20022:22
启动容器 - 添加
gitlab_rails['gitlab_shell_ssh_port'] = 20022
到你的gitlab.rbconfiguration
- gitlab-ci runner的Docker执行器| 我怎样才能看到docker容器在哪里生成?
- Gitlab CI /var/run/docker.sock:写入:损坏的pipe道
- 使用eirslett:frontend-maven-plugin在gitlab.com上运行maven
- gitlab-runner和docker executor找不到官方的图片,比如maven:3.3.9-jdk-8
- 通过docker socket连接Gitlab和runner
- 无法在GitLab CI上的docker镜像中导入django
- Gitlab亚军+自动缩放+缩放亚军选项
- 当docker-volume或服务器数据被重新创build时,如何再一次推入gitlab?
- 为什么我的Arquillian无人机functiontesting不适用于GitLab CI?