2026-04-15

使用 ssh-copy-it 管理 ssh 登入免密碼方式

 利用 tailscale 把多台機器串接在同一個網域內. 所以, 可以利用 ssh 從我的工作機連接到遠端的工作機. 使用 ssh 連線, 需要記住帳號密碼, 研究後使用 部署金鑰 方式來免除一些輸入. 

整個概念是 

  • 要在 local 先產生相關的 private and public key , 並使用 ssh-copy-it 將公鑰上傳到 remote 
  • 在 local 維護好相對應的 .ssh/config , 這樣才可以簡單連線到 remote 
  • 透過 .ssh/conf.d/work , 把一些 host config 編輯分開. 

以下是可行步驟

1. 快速部署金鑰
使用 ssh-copy-id 將公鑰寫入遠端主機,達成免密碼登入。
bash
# 基本格式:-i 指定公鑰,-p 指定連接埠
ssh-copy-id -i ~/.ssh/your_key.pub -p 22 user@hostname
請謹慎使用程式碼。

2. 結構化設定:使用 Include 拆分檔案
當主機變多時,建議將設定檔依專案分類存放於 conf.d/ 資料夾。
步驟 A:建立資料夾與子設定檔
  1. mkdir -p ~/.ssh/conf.d
  2. 建立新檔案 ~/.ssh/conf.d/work,內容如下:
    text
    Host my-server
        HostName 1.2.3.4
        User admin
        IdentityFile ~/.ssh/id_ed25519_work
    
    請謹慎使用程式碼。
步驟 B:修改主設定檔 ~/.ssh/config
在主檔案最頂端加入載入指令:
text
Include conf.d/*

# 其他通用設定...
請謹慎使用程式碼。

3. 自動化驗證設定 (免手動檢查)
修改完設定後,無需連線即可驗證 SSH 是否正確抓取 conf.d/ 內的參數。
指令:一次提取關鍵設定
執行以下指令,直接查看該別名(Host)最終套用的使用者、IP 與金鑰:
bash
ssh -G my-server | grep -E "^user |^hostname |^identityfile "
請謹慎使用程式碼。
指令:自動化成功判定 (Script 用)
如果你想用指令直接判斷某把金鑰是否生效,可以使用這段邏輯:
bash
ssh -G my-server | grep -q "identityfile ~/.ssh/id_ed25519_work" && echo "✅ 讀取成功" || echo "❌ 讀取失敗,請檢查路徑與權限"
請謹慎使用程式碼。

4. 必要的權限修復
如果設定無效,通常是權限過大導致 SSH 忽略該檔案。請執行:
bash
# 確保資料夾與檔案權限正確
chmod 700 ~/.ssh ~/.ssh/conf.d
chmod 600 ~/.ssh/config ~/.ssh/conf.d/*
請謹慎使用程式碼。

沒有留言:

張貼留言