我想在我的主机上配置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 回答
我发现了一个简单的解决方法 . 只需在主机上创建一个Git用户,并提供一个代理脚本,该脚本使用主机的SSH守护程序和容器卷中的
.ssh/authorized_keys
在GitLab容器中执行给定的Git命令 .git
,并将GitLabdata
目录设置为用户的主目录:git
用户添加到泊坞窗组/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell
,内容如下:您提出的建议将使用户需要进行两次身份验证 . 一次使用你的服务器,第二次使用docker中的gitlab,这基本上是你不想要的东西 .
当您提到公钥认证时,需要以某种方式与您的主机共享gitlab中的授权密钥文件或命令 .
我相信它是可能的,但更容易打开那个端口 .
从客户端,你可以像_2405596这样做:
另一种(未经测试的)可能是您将连接从主机转发到容器中,方法是将其添加到git用户的authorized_keys文件中:
应该在主机上创建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配置中我正试图将我的git repos通过我的主机推入docker机器 . 我使用ForceCommand选项玩了一点 . 这对我有用;)