Çok özel bir duruma girdim ve bunu yapmanın başka yolları olsa da, buna takıntılı oldum ve bunu tam olarak böyle yapmanın bir yolunu bulmak istiyorum:
Arka fon
Diyelim ki izole docker kaplarına sıkışmış birkaç hizmeti çalıştıran bir sunucum var. Bu hizmetlerin çoğu http olduğundan, her hizmete belirli alt etki alanları göstermek için bir nginx proxy kullanıyorum. Örneğin, bir düğüm sunucusu bağlantı noktası ana makineye 80
bağlı olarak bir docker kapsayıcısında çalışıyor 127.0.0.1:8000
. Ben proxy uygulama tüm istekleri için nginx bir sankonu oluştururuz myapp.mydomain.com
için http://127.0.0.1:8000
. Bu şekilde, docker konteynerine içinden hariç, dışarıdan erişilemez myapp.mydomain.com
.
Şimdi bir gogs docker konteynerini gogs.mydomain.com
gogs konteynerine işaret edecek şekilde başlatmak istiyorum . Bu yüzden ana bilgisayara bağlı port ile bu gogs konteyner başlatmak . Ve bir nginx sitesi isteklerini proxy için ve iyi çalışıyor ...8000
127.0.0.1:8001
gogs.mydomain.com
http://127.0.0.1:8001
Ancak, git git kap olmak gogs, ben de aracılığıyla depoları erişmek istiyorum git@gogs.mydomain.com:org/repo
ama geçerli kurulum ile çalışmaz. Bu işi yapmanın bir yolu 22
, konteynerin bağlantı noktasını 0.0.0.0:8022
ana bilgisayardaki bağlantı noktasına bağlamak ve daha sonra git ssh url'si gibi bir şey olabilir git@gogs.mydomain.com:8022/repo
.
(Yani işin görünmüyor; böyle uri bir kökeni iterken, git kullanıcının parolasını talep git
üzerine gogs.mydomain.com
- yerine gogs.mydomain.com:8022
- ama bu ancak, muhtemelen bu soru için yanlış ve kapsam dışında yapıyorum şey, Bunun için herhangi bir teşhis için minnettar olurum)
Sorun
Benim asıl endişe, ben ssh bağlantı noktası <gogs container>:22
nginx kullanarak http bağlantı noktaları proxy gibi proxied istiyorum olduğunu; örn . gogs.mydomain.com
kabın bağlantı noktasına iletilecek ssh bağlantıları 22
. Artık ana bilgisayarda çalışan bir sshd olduğu için kabın ssh portunu ana bilgisayarın ssh portuna bağlayamıyorum. Ayrıca, bu *.mydomain.com
, kapsayıcıya ait herhangi bir bağlantının sshd'ye geçeceği anlamına gelir .
Herhangi bir ssh bağlantısı istiyorum:
mydomain.com
host.mydomain.com
veya alan adımın IP adresi kabul edilecek ve ana bilgisayardaki sshd'ye iletilecekgogs.mydomain.com
veyagit.mydomain.com
gogs kapsayıcısındaki sshd'ye kabul edilmek*.mydomain.com
(*
yukarıdaki olasılıklardan başka bir şey nerede ) reddedilecek
Eğer http olsaydı, bu işi nginx aracılığıyla kolayca yapabilirdim. Ssh için bunu yapmanın bir yolu var mı?
(Ayrıca bir uzuv dışarı çıkmak ve sormak istiyorum: genel olarak herhangi bir tcp hizmeti ile bunu başarmak için bir yolu var mı?)
Burada yapmaya çalıştığım yolla ilgili herhangi bir fikir de kabul edilir. Yapmaya çalıştığım şeyin tamamen aptalca olduğu söylenmesine aldırmıyorum.
Zaten aklımda ne var:
Belki ana bilgisayardaki sshd soketini bir kap olarak kap ile paylaşabilir miyim ro
? Bu, kabın içindeki sshd'nin tüm bağlantıları alabileceği anlamına gelir *.mydomain.com
. Konteyner içindeki sshd'nin veya dışındaki tüm bağlantıları reddetmesinin bir yolu olabilir mi? Ancak, ana bilgisayardaki sshd dahil olmak üzere tüm bağlantıları alacak ; yani bir çatışma olur. Bilmiyorum, gerçekten denemedim. Should ben denemek?gogs.mydomain.com
git.mydomain.com
*.mydomain.com
gogs.mydomain.com