跳至主要內容

透過 SSH 連線

複製連線指令

執行個體 開啟該執行個體,並停留在 連線 頁籤。指令已經替你算好,主機、連接埠與使用者都填好了:

ssh -p 40123 root@sh-us-tx-01.ssh.superheat.dev

請用旁邊的複製按鈕,不要自己重打各個部分。連線資訊只有在執行個體進入 running 之後才會出現;在那之前,頁籤會告訴你它們還沒準備好。

除非算好的指令另有說明,否則使用者是 root。驗證使用你在部署時附加的 SSH 金鑰。

為什麼連接埠不是 22

在容器內,sshd 監聽 22。該連接埠接著被發布到主機的某個連接埠上,取自該主機可用的範圍,而你連的是那個主機連接埠。號碼在啟動時指派,每個執行個體都不同,而且和 22 一點關係都沒有。

有兩個後果值得記住:

不加 -pssh root@sh-us-tx-01.ssh.superheat.dev會失敗,或連到不是你執行個體的東西
停止再啟動之後的主機與連接埠會重新簽發,所以可能不是你之前用的那一組

每次啟動後都從 連線 頁籤重新複製指令,不要依賴 shell 的歷史紀錄。

第一次連線

容器第一次開機時會產生全新的主機金鑰,所以新的執行個體一定會提示:

The authenticity of host '[sh-us-tx-01.ssh.superheat.dev]:40123 ([203.0.113.14]:40123)' can't be established.
ED25519 key fingerprint is SHA256:0Xk2r1uJ3q…
Are you sure you want to continue connecting (yes/no/[fingerprint])?

回答 yes。指紋會針對該主機與連接埠記錄在 ~/.ssh/known_hosts 裡。

因為主機與連接埠的組合會隨著執行個體來來去去而被回收,你遲早會在用過的主機與連接埠上連到一個新的執行個體,而 OpenSSH 會以 REMOTE HOST IDENTIFICATION HAS CHANGED 拒絕連線。刪掉過期的項目再連一次:

ssh-keygen -R "[sh-us-tx-01.ssh.superheat.dev]:40123"

當你的用戶端提供了錯的金鑰

密碼驗證已關閉;authorized_keys 裡只有部署時附加的那把金鑰。如果你的 agent 持有好幾把金鑰,OpenSSH 可能在輪到正確那把之前就用完嘗試次數,於是你會拿到 Permission denied (publickey)。明確指定金鑰:

ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes -p 40123 root@sh-us-tx-01.ssh.superheat.dev

執行個體部署之後,沒有辦法再替它附加另一把金鑰。先在 SSH 金鑰 底下加入你要的金鑰,然後再部署。請見新增金鑰

用一個 host 項目取代冗長的指令

Host superheat
HostName sh-us-tx-01.ssh.superheat.dev
Port 40123
User root
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes

然後就能用 ssh superheatscp -r ./data superheat:/workspace/ 等等。啟動之後記得更新 HostNamePort

Agent 轉送

當執行個體需要以你的身分進行驗證時 — 例如複製私有儲存庫 — 就轉送你本機的 agent,這樣才不會有任何私密金鑰被寫到執行個體上:

ssh -A -p 40123 root@sh-us-tx-01.ssh.superheat.dev

或是在上面的 host 項目中加上 ForwardAgent yes

Agent 轉送等於把你的金鑰借出去

在工作階段開著的期間,任何在該容器上擁有 root 權限的東西,都能用你轉送過去的 agent,在任何接受你金鑰的地方冒充你進行驗證。請針對個別連線轉送,不要全域開啟;無人看管的工作則優先使用範圍限定於單一儲存庫的部署金鑰。

把資料搬進搬出

scp 的連接埠參數是大寫的 -P,不是 ssh 用的 -p

# push a dataset up
scp -P 40123 -r ./data root@sh-us-tx-01.ssh.superheat.dev:/workspace/data

# pull checkpoints back down
scp -P 40123 -r root@sh-us-tx-01.ssh.superheat.dev:/workspace/checkpoints ./checkpoints

rsync 已安裝在 Superheat 基礎映像檔中,對於任何大型或重複的傳輸都是更好的選擇,因為 -P 會續傳未完成的傳輸,而不是從頭來過:

# up
rsync -avP -e "ssh -p 40123" ./data/ root@sh-us-tx-01.ssh.superheat.dev:/workspace/data/

# down
rsync -avP -e "ssh -p 40123" root@sh-us-tx-01.ssh.superheat.dev:/workspace/checkpoints/ ./checkpoints/

結尾斜線對 rsync 很重要:./data/ 複製的是 data 的內容,./data 複製的是目錄本身。

銷毀會刪除硬碟

沒有快照,也沒有回復。在銷毀之前,先把任何你想留下的東西從執行個體複製出來。請見停止與銷毀的差別

相關內容