簡體   English   中英

模擬 SSH 轉發到 Docker 容器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM