網(wǎng)穿透實現(xiàn)外網(wǎng) SSH 免密遠(yuǎn)程連接 GPU 容器)
摘要CloudStudio 免費 GPU 容器僅支持網(wǎng)頁 IDE 訪問無法直接通過 SSH 遠(yuǎn)程連接。本文采用 cpolar 內(nèi)網(wǎng)穿透將容器 22 端口 SSH 服務(wù)暴露至公網(wǎng)搭配 SSH 密鑰免密登錄方案實現(xiàn) Windows WSL2 終端一鍵遠(yuǎn)程登錄云端容器方便本地開發(fā)、遠(yuǎn)程模型訓(xùn)練。同時整理實操過程大量踩坑點適合新手完整復(fù)現(xiàn)。TOC一、環(huán)境與痛點介紹1.1 環(huán)境清單遠(yuǎn)端CloudStudio Ubuntu GPU 容器免費實例本地Windows11 WSL2 Ubuntu穿透工具cpolar免費版1.2 現(xiàn)存痛點CloudStudio 免費實例閑置一段時間會被平臺自動休眠回收實例重啟后所有進(jìn)程銷毀cpolar 免費隧道重啟后公網(wǎng)域名、端口隨機(jī)變化Linux SSH 服務(wù)對密鑰文件權(quán)限嚴(yán)格校驗權(quán)限配置錯誤直接導(dǎo)致免密登錄失敗網(wǎng)頁終端意外關(guān)閉容器內(nèi)運行的 cpolar 進(jìn)程容易被終止。1.3 實現(xiàn)目標(biāo)本地終端輸入簡短命令ssh cs無需輸入長地址、密碼一鍵外網(wǎng)登錄 CloudStudio 云端 GPU 容器。二、完整分步實操教程2.1 本地 WSL 生成 SSH 密鑰對【本地終端執(zhí)行】生成 4096 位 RSA 密鑰全程回車不要設(shè)置密鑰密碼實現(xiàn)無密碼登錄。bashssh-keygen -t rsa -b 4096執(zhí)行完成查看公鑰內(nèi)容完整復(fù)制后續(xù)需要使用bashcat ~/.ssh/id_rsa.pub輸出內(nèi)容以ssh-rsa開頭末尾為本機(jī)標(biāo)識妥善保存。2.2 CloudStudio 容器啟動 cpolar 穿透隧道【云端容器執(zhí)行】推薦使用tmux后臺運行 cpolar避免網(wǎng)頁終端關(guān)閉殺死進(jìn)程。bash# 創(chuàng)建tmux獨立會話 tmux new -s cpolar在彈出的 tmux 窗口內(nèi)啟動 TCP 隧道映射 SSH 默認(rèn) 22 端口bashcpolar tcp 22等待狀態(tài)切換為online復(fù)制打印的轉(zhuǎn)發(fā)地址tcp://xxx.tcp.cpolar.top:端口號 - tcp://127.0.0.1:22tmux 常用操作CtrlB松開再按下D后臺掛起會話tmux a -t cpolar重新恢復(fù)會話窗口2.3 本地測試密碼登錄遠(yuǎn)端容器【本地 WSL 執(zhí)行】將域名、端口替換成 cpolar 輸出的最新地址bashssh -p 端口號 lilixxx.tcp.cpolar.top首次連接輸入yes確認(rèn)主機(jī)指紋輸入容器登錄密碼驗證通道連通。2.4 云端容器寫入公鑰配置免密認(rèn)證【云端容器內(nèi)執(zhí)行】將雙引號內(nèi)文本替換為第一步復(fù)制的完整id_rsa.pub公鑰bashmkdir -p ~/.ssh echo ssh-rsa XXXXX 本地用戶名主機(jī)名 ~/.ssh/authorized_keys # Linux SSH硬性權(quán)限要求兩條命令必須執(zhí)行 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys執(zhí)行完畢輸入exit退出服務(wù)器回到本地 WSL 終端。2.5 本地 WSL 創(chuàng)建 SSH 快捷配置文件【本地終端執(zhí)行】??不推薦 vim 手動粘貼極易引入不可見亂碼字符導(dǎo)致配置報錯使用下面命令一鍵生成純凈配置bashrm -f ~/.ssh/config cat ~/.ssh/config EOF Host cs HostName xxx.tcp.cpolar.top Port 端口號 User lili ServerAliveInterval 30 ServerAliveCountMax 3 EOF # 設(shè)置配置文件權(quán)限 chmod 600 ~/.ssh/config參數(shù)說明ServerAliveInterval開啟心跳保活減少長時間閑置 SSH 通道斷開。2.6 一鍵免密登錄測試bashssh cs? 無需輸入密碼直接進(jìn)入云端容器整套部署完成三、高頻踩坑匯總重點收藏坑 1ssh: Connection refused現(xiàn)象連接目標(biāo)端口被拒絕原因CloudStudio 實例休眠重啟cpolar 隧道失效舊域名端口作廢。解決方案容器內(nèi)重啟 cpolar 獲取新地址同步修改本地~/.ssh/config中的域名、端口。補(bǔ)充實操實例重啟后快速更新 SSH 配置CloudStudio 重啟后 cpolar 會生成全新轉(zhuǎn)發(fā)地址需要同步修改本地 WSL 的 ssh 配置文件bashnano ~/.ssh/config將HostName和Port修改為 cpolar 新輸出的域名與端口。 nano 操作快捷鍵CtrlO保存 → 回車確認(rèn) →CtrlX退出。不想手動編輯可以直接執(zhí)行下面命令一鍵覆蓋記得替換為最新地址bashrm -f ~/.ssh/config cat ~/.ssh/config EOF Host cs HostName 新域名 Port 新端口 User lili ServerAliveInterval 30 ServerAliveCountMax 3 EOF chmod 600 ~/.ssh/config修改完成執(zhí)行ssh cs測試連通。坑 2config line 1: no argument after keyword現(xiàn)象ssh 配置文件存在非法字符原因Vim 粘貼內(nèi)容帶入終端顏色控制亂碼。解決方案放棄手動 vim 粘貼使用cat ~/.ssh/config命令自動生成配置文件。坑 3公鑰已經(jīng)上傳依舊要求輸入密碼按順序排查云端容器是否成功執(zhí)行兩條chmod權(quán)限命令authorized_keys文件內(nèi)公鑰完整不存在多余換行、空格使用的公鑰是本地 WSL 生成的id_rsa.pub復(fù)制內(nèi)容無誤。坑 4CloudStudio 免費實例自動休眠斷開平臺底層策略無法徹底關(guān)閉閑置檢測。 緩解方案容器內(nèi)運行后臺保活腳本模擬活躍bashcat keep_alive.sh EOF while true do curl -s https://www.baidu.com /dev/null sleep 300 done EOF chmod x keep_alive.sh nohup ./keep_alive.sh alive.log 21 提示僅能延長存活時長無法保證永久不被平臺回收。坑 5cpolar 狀態(tài)長時間 connecting無法 online排查流程測試容器外網(wǎng)curl www.baidu.com確認(rèn) cpolar 綁定賬號 Tokensudo cpolar authtoken 你的后臺TokenCtrlC終止進(jìn)程多次重試啟動隧道。坑 6WSL 和 Windows PowerShell SSH 環(huán)境互不通用WSL 內(nèi)部的密鑰、配置僅在 WSL 環(huán)境生效 Windows 原生 PowerShell 配置路徑C:\Users\Windows用戶名\.ssh兩套環(huán)境獨立需要分別配置。四、拓展實用命令4.1 本地 ? 云端文件互傳免密后直接使用bash# 上傳本地文件到云端服務(wù)器 scp 本地文件路徑 cs:~/ # 下載云端文件到本地 scp cs:~/云端文件路徑 ./4.2 tmux 會話常用命令bashtmux new -s cpolar # 創(chuàng)建獨立會話 tmux a -t cpolar # 恢復(fù)斷開的會話 CtrlB 再按 D # 后臺掛起當(dāng)前會話五、標(biāo)準(zhǔn)化日常工作流程避坑習(xí)慣每次 CloudStudio 實例重啟后固定操作順序網(wǎng)頁打開 CloudStudio 啟動實例進(jìn)入容器運行保活腳本創(chuàng)建 tmux 會話在會話中啟動cpolar tcp 22;復(fù)制新的公網(wǎng)轉(zhuǎn)發(fā)地址更新本地 WSL~/.ssh/config使用ssh cs一鍵遠(yuǎn)程連接。六、小結(jié)借助 cpolar 內(nèi)網(wǎng)穿透 SSH 密鑰免密擺脫 CloudStudio 只能網(wǎng)頁端操作的限制可以在本地終端自由操作云端 GPU 容器。需要留意免費版兩大限制實例閑置回收、隧道地址動態(tài)變化每次重啟實例記得更新 ssh 配置內(nèi)的域名端口。