Toolmen 使用指南

使用 SSH 連線至容器

請先以 opkssh 產生金鑰,再連線至您的容器。

開始之前
  1. 安裝 opkssh

    終端機
    winget install openpubkey.opkssh

    安裝完成後,請開啟新的終端機,再進行下一步。若系統找不到 winget,請參閱問題排除。

    終端機
    brew tap openpubkey/opkssh
    終端機
    brew install opkssh

    若系統找不到 brew,請參閱問題排除。

    終端機
    curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-amd64 -o opkssh
    終端機
    chmod +x opkssh
    終端機
    sudo mv opkssh /usr/local/bin/

    上述為 x86_64 的網址。若為 ARM64,請將 opkssh-linux-amd64 改為 opkssh-linux-arm64。

  2. 設定 Keycloak

    此步驟僅需執行一次。請先建立設定檔:

    終端機
    opkssh login --create-config

    請開啟設定檔:macOS 與 Linux 位於 ~/.opk/config.yml,Windows 位於 C:\Users\<使用者名稱>\.opk\config.yml。接著在 providers: 底下加入下列內容:

    config.yml
      - alias: toolmen
        issuer: https://keycloak.toolmen.bime.ntu.edu.tw/realms/Toolmen_application
        client_id: opkssh
        scopes: openid email
        access_type: offline
        prompt: consent
        redirect_uris:
          - http://localhost:3000/login-callback
          - http://localhost:10001/login-callback
          - http://localhost:11110/login-callback
  3. 產生金鑰

    終端機
    opkssh login toolmen
    您應該會看到

    瀏覽器開啟 Keycloak 登入頁面。登入後,金鑰預設儲存至 ~/.ssh/id_ecdsa。

    金鑰每 24 小時過期

    過期後請重新執行此指令,詳見金鑰過期時。

  4. 查詢位址並連線

    下方影片示範完整流程:在 NetBird 查詢容器的位址並以 SSH 連線,接著重啟容器,再改用新的位址連線。

    完整操作約 1 分鐘,可暫停影片並依序操作。

    查詢容器的位址

    1. 開啟 NetBird,在 Peers 分頁的搜尋框輸入您的 SSO ID(例如 aaron),清單會列出您的容器。
    2. 將滑鼠移至容器名稱,按名稱右側的複製圖示,即可複製 NetBird 網域。名稱下方的 peer IP 也可用相同方式複製,兩者擇一即可。

    名稱左側的圓點為灰色並非故障:第一次連線時才會建立連線。

    使用終端機查詢

    請將 <sso-id> 替換為您的 SSO ID。Windows 請執行:

    終端機
    netbird status -d | findstr <sso-id>

    macOS 與 Linux 請執行:

    終端機
    netbird status -d | grep <sso-id>
    您應該會看到
     <peer 名稱>.netbird.toolmen:

    兩個指令的結果相同,此行不含結尾的冒號即為 NetBird 網域。若另外出現以 FQDN: 開頭的一行,那是您自己的電腦,請勿使用。

    以 SSH 連線

    請將 <sso-id> 替換為您的 SSO ID,<peer-ip> 替換為剛才複製的 NetBird 網域或 peer IP:

    終端機
    ssh <sso-id>@<peer-ip>
    您應該會看到

    第一次連線至此位址時,SSH 會詢問 Are you sure you want to continue connecting,請輸入 yes。連線成功後,即進入容器的命令列。

    無法連線?
    • 請執行 netbird status,確認 NetBird 仍在連線中。
    • 若 SSH 要求輸入密碼,表示金鑰已過期,請參閱金鑰過期時。
    • 容器重啟後位址會變更,請參閱容器重啟後。
    • 若仍無法解決,請參閱聯絡窗口。

    容器重啟後

    容器重啟後 IP 與網域會變更

    舊的位址將無法連線:以舊的位址執行 ssh 時不會有回應,請按 Ctrl+C 結束。

    1. 在 NetBird 再次搜尋您的 SSO ID。清單會暫時同時列出舊的與新的 peer,請使用名稱與先前不同的新 peer;舊的 peer 已離線,數分鐘後會從清單消失。
    2. 以新的位址重新連線。由於位址不同,SSH 會再次詢問 Are you sure you want to continue connecting,請輸入 yes。

    使用 SSH config

    您也可以將設定寫入 ~/.ssh/config:

    ~/.ssh/config
    Host just-name
      HostName <peer-ip 或 NetBird 網域>
      Port 22
      User <sso-id>
    • Host:自訂的名稱。
    • HostName:peer IP 或 NetBird 網域皆可。容器重啟後請更新此值。
    • User:您的 SSO ID。

    設定完成後,使用此名稱即可連線:

    終端機
    ssh just-name
    資料請存放於 /home/nas

    存放於家目錄與 /home/nas 以外的資料將會遺失。

金鑰過期時

金鑰每 24 小時過期。若連線時 SSH 要求輸入密碼,例如出現 <sso-id>@<peer-ip>'s password:,表示金鑰已過期,請依下列方式更新。

完整操作約 30 秒。

請按 Ctrl+C 結束,不需要輸入密碼,再重新產生金鑰:

終端機
opkssh login toolmen
您應該會看到

瀏覽器開啟並顯示 You may now close this window,即可關閉該分頁;若出現 Keycloak 登入頁面,請先登入。終端機會顯示 Keys generated for identity。

完成後,再次執行原本的 ssh 指令即可連線。

如有問題,請參閱聯絡窗口。