SSH === [TOC] 本機設定 ~/.ssh/config 遠端設定 ~/.ssh/authorized_keys ### 基本指令 ```bash ssh [使用者名稱]@[主機名稱或IP] ``` #### SSH Key ```bash # 產生 SSH 金鑰對 ssh-keygen -t rsa -b 4096 # Or (使用 -f 需先 cd 至 .ssh) ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f <sshkeyname> # 將公鑰複製到遠端伺服器 ssh-copy-id [使用者名稱]@[主機名稱或IP] ``` #### 測試連線 ```bash ssh -T git@github.com ``` #### 除錯模式 ```bash ssh -v git@github.com ``` #### 結合使用 ```bash ssh -v [使用者名稱]@[主機名稱或IP] # Example: github ssh -vT git@github.com ``` Windows ======= 把 Windows 當成 SSH Sever 1. 在 `設定` 中搜尋 `選用功能 (Optional features)` 安裝 `OpenSSH Server` 2. 開啟 `服務 (Services)` 應用程式 (透過「開始」選單搜尋 services.msc 來開啟) 3. 啟動相關服務 (按 S 來搜尋) 4. 設定防火牆 (入站規則 -> 新增規則 -> 連接埠 -> TCP(22) -> 允許連線) 使用金鑰 ------- ```bash ### 本機 ### ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ### 遠端 ### # 將 本機的~/.ssh/*.pub 移至 遠端的~/.ssh/authorized_keys # authorized_keys 一行一個金鑰 chmod -R 700 ~/.ssh ``` 在 ~/.ssh/config 加入 ```bash # id_rsa: 若有改金鑰檔名, 請換成自己的金鑰檔名 IdentityFile ~/.ssh/id_rsa ``` #### (可選) 將私鑰加到 ssh-agent ```bash eval "$(ssh-agent -s)" ssh-add -K ~/.ssh/id_rsa ``` 避坑 --- ### 金鑰檔案放置位置 管理員帳號若想用 ~/.ssh/authorized_keys,必須註解掉 Match Group administrators 區塊並重啟 sshd - 一般使用者帳號 ``` C:\Users\<username>\.ssh\authorized_keys ``` - 管理員帳號(Administrators 群組成員),預設會讀: ``` C:\ProgramData\ssh\administrators_authorized_keys ``` (由 sshd_config 裡的 Match Group administrators 決定) ### 檔案權限(Windows ACL 很嚴格) 權限太開放會導致「金鑰被完全忽略」而不報錯,只會默默回到密碼登入。在 powershell 執行以下兩行 ```powershell # .ssh icacls "$env:USERPROFILE\.ssh" /inheritance:r /grant "$($env:USERNAME):(R,W)" /grant "SYSTEM:(R,W)" # authorized_keys icacls "$env:USERPROFILE\.ssh\authorized_keys" /inheritance:r /grant "$($env:USERNAME):(R)" /grant "SYSTEM:(R)" # administrators_authorized_keys icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:(R)" /grant "SYSTEM:(R)" ``` ### sshd_config C:\ProgramData\ssh\sshd_config 1. 解開 PubkeyAuthentication 的註解 ```bash PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ``` 2. 如果不想用管理員專用金鑰檔,把以下註解掉: ```bash # Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys ``` ### 重啟 sshd 改完 sshd_config 要重啟服務才會生效,在 powershell 執行: ```powershell # 需系統管理員權限 Restart-Service sshd ``` DGX SSH For Vscode ================== 在本機執行以下動作,以下將 `C:\User\<username>\.ssh` 簡成 `~/.ssh` 1. 在 vscode Extensions 下載 Remote - SSH 2. 將 `config` 移至 `~/.ssh/config` 3. 在 Remote Explore 開啟 DGX 並連線 Example ------- ### config ``` Host DGX HostName 140.123.106.239 User lab120 Port 22 IdentityFile ~/.ssh/dgx ``` ### authorized_keys ``` ssh-rsa ... ssh-rsa ... ```