2016-11-04 70 views
3

我有安裝了Docker引擎的運行Ubuntu 16.04的服務器。如何根據請求的域將SSH轉發到GitLab Docker容器

在一個容器我跑GitLab服務(以及其他的東西當然還有很多其他容器)。我們稱之爲Docker網絡地址GITLAB_IP

我使用nginx-proxy代理來自外部的基於VIRTUAL_HOST環境變量的HTTP請求。

DNS設置,所以一切針對*.mydomain.commydomain.com和在同一主機上得到解決。

去我mydomain.com的請求由我的主要nginx容器提供,而請求去gitlab.mydomain.com由我的GitLab容器提供服務。

在端口80(和443)上一切正常。

現在我想能夠通過ssh使用git。我正在努力實現的是,如果我做

> ssh mydomain.com

我將在我的主機服務器的終端而告終。如果我做

> ssh gitlab.mydomain.com

然後我想在GitLab容器的終端結束。

我知道我可以映射主機上的一些未使用的端口上的容器的端口22,所以我能夠通過SSH-ING於如訪問容器。端口10022,但我更喜歡它乾淨清晰。

有什麼辦法讓主機上的ssh服務器以某種方式充當代理,當檢測到特定的域時?

回答

1

與HTTP或啓用SNI的TLS服務不同,SSH服務沒有任何基於名稱的邏輯檢測。

長而短的是,你得到每個IP /端口一個SSH守護進程。

有可能工作的解決方法。

端口碰撞是一種可能性。根據您發送的敲擊,您可以更改防火牆向您轉發的服務。

你可以做的另一件事是建立一個.ssh/authorized_keys文件,該文件將識別你使用的SSH密鑰,然後強制一個命令啓動一個新的ssh進程並將你放到正確的相應服務上。

你也可以在不同的端口上運行的每個SSH服務,並有一個客戶端配置文件,辦理名稱 - >端口映射。

+0

有沒有可能設置SSH守護進程(或者某些登錄腳本?)來處理基於用戶名的重定向?考慮到將始終只有一個GitLab實例,我想知道是否可以將它重定向/重新連接/隧道用戶'git'到GitLab容器。 –

+0

是的,這應該是可行的。你可以設置一個運行openssh的「機器」,它有多個用戶。每個用戶都可以在服務器端擁有自己的強制命令,該命令將執行相應的ssh命令將其放入適當的位置。 – programmerq

+1

感謝您的回覆。似乎[這可能是解決方案](http://stackoverflow.com/questions/33042817/have-sshd-forward-logins-of-git-user-to-a-gitlab-docker-container)對我來說。 –

相關問題