[英]Emulate SSH forwarding to a Docker container
我有一個運行 Docker 的服務器(我們稱之為host
)和一個容器(稱之為guest
)。 guest
運行 SSH 服務器並將其暴露給host
的 5000 端口,但host
不會將其暴露給外界。
我可以從我的機器 SSH 進入host
。 然后我可以 SSH 進入 localhost:5000 這讓我進入guest
。 我可以使用 SSH 配置自動執行這兩個步驟,例如:
Host guest
HostName localhost:5000
ProxyJump host
現在從我的機器上輸入ssh guest
將使用host
作為代理自動連接到guest
。
但是,最佳做法是避免使用 SSH 並改用docker exec
之類的工具。 However, if I remove the SSH server from guest
, the SSH config above will break, and I will go back to having to do the 2 steps of SSH host
, then docker exec guest
.
是否有可能以某種方式設置 Docker 以便代理 SSH 連接自動轉換為docker exec guest
命令?
您是否考慮過使用ssh 隧道選項?
在我的服務器上,我使用:
ssh -M -S my-ctrl-socket -fnNT -o ExitOnForwardFailure=yes -L /tmp/docker.sock:/var/run/docker.sock ${SERVER_USER}@${SERVER_IP}
分解這個命令:
-M
將 ssh 客戶端置於主模式以進行連接共享-S my-ctrl-socket
指定用於連接共享的控制套接字的位置,作為memory中的實際文件,在本例中稱為my-ctrl-socket
-fnNT
可以分解為:
-f
在命令執行前向后台請求 ssh 到 go-n
從 /dev/null 重定向標准輸入(實際上,阻止從標准輸入讀取)。 這必須在 ssh 在后台運行時使用。-N
不執行遠程命令。 這對於僅轉發端口很有用。-T
禁用偽終端分配-o ExitOnForwardFailure=yes
設置附加標志-L local_socket:remote_socket
指定到給定 TCP 端口或本地(客戶端)主機上的 Unix 套接字的連接將被轉發到給定的主機和端口,或遠程端的 Z6EC1BD1EA6A5D67A63B20C8F6172BDDDDD 套接字。${SERVER_USER}@${SERVER_IP}
是服務器用戶和服務器 IP。 總而言之,這個命令允許我在 docker 中運行 docker 命令 - 比如docker exec [..]
- 在 docker 中,從我提到的終端中避免目標主機的套接字,有效地允許我執行兩步過程。 在這里你可以找到一個額外的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.