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/*
請謹慎使用程式碼。

2026-01-06

[Mac] /tmp 目錄指向 RamDisk

這半年來, 持續用 claude and copilot 進行系統開發工作.  在過程中, ai tools 會運用很多 shell 工具或者 sed 等文字編輯工具, 將相關需要輸出的 log, 文件 or 檢查程式碼 寫到 /tmp 目錄去. 

查詢過 mac 對於 /tmp 目錄內檔案的處理模式, 預設是重新開機後, 會將 /tmp 內部資料清空. 但是我個人久久才會重新開機一次, 這樣導致我的 /tmp 被佔用了很多空間,  而且裡面的檔案我也不能一次清空. 

有個想法, 我可以把 /tmp 指向我開的 ramdisk 去嗎 ? 好處有

1. 檔案讀寫都是 ram base, 並不會佔用我的 SSD 存取

2. 如果要刪除, 手動刪除也容易. 


解決方式 : 

使用 zshrc 指向 TMPDIR 到我的 RamDisk.  而不是把整個 /tmp 指向過去, 這樣只有會用到 console 的應用程式, 會把 temp file 寫到 RamDisk 去. 

第一步:建立獨立腳本檔
將自定義腳本放在 ~/.dotfiles 。這裡我們建立一個名為 ~/.dotfile/zshrc/ramdisk_tmp.zsh 的檔案
zsh
# --- RamDisk TMPDIR 配置腳本 ---
# 2026 建議做法:使用環境變數而非修改系統連結

local RAMDISK_PATH="/Volumes/RamDisk"
local RAMDISK_TMP="$RAMDISK_PATH/tmp"

# 1. 檢查 RamDisk 卷軸是否已掛載
if [ -d "$RAMDISK_PATH" ]; then
    
    # 2. 如果 tmp 目錄不存在,則建立它
    if [ ! -d "$RAMDISK_TMP" ]; then
        mkdir -p "$RAMDISK_TMP"
        # 設定權限 700 僅限當前使用者存取,安全且符合 macOS 規範
        chmod 700 "$RAMDISK_TMP"
    fi

    # 3. 匯出環境變數
    export TMPDIR="$RAMDISK_TMP"
    
    # 選用:也將其指向常用變數以確保相容性
    export TEMP="$RAMDISK_TMP"
    export TMP="$RAMDISK_TMP"
    
    # 偵錯用(若想確認是否載入成功,可取消下一行註解)
    # echo "TMPDIR has been set to RamDisk: $TMPDIR"
fi
請謹慎使用程式碼。
第二步:在 .zshrc 中載入
編輯您的 ~/.zshrc 檔案,在末尾加入一行來讀取該檔案:
  1. 執行:nano ~/.zshrc
  2. 加入以下程式碼:
zsh
# 載入 RamDisk 暫存路徑設定
[[ -f ~/.ramdisk_tmp.zsh ]] && source ~/.ramdisk_tmp.zsh
請謹慎使用程式碼。
第三步:使設定生效
在終端機執行以下指令:
zsh
source ~/.zshrc

2025-09-09

[Mac] 新版 RamDisk for m系列 CPU

 之前寫的 RamDisk , 無法直接在 m系列 cpu 執行, 需要透過 rostanet 方式才能執行. 

做一版新的, 用新版得 工序指令編寫程式 , 重新開發一個新的. 


1. 調整使用 APFS 作為新的 檔案格式, HPF+ 舊格式, 就不用了

2. 要輸出成 應用程式,  原始檔可以跟 應用程式分開了

```

do shell script "

if ! test -e /Volumes/RamDisk ;  then

diskutil erasevolume APFS RamDisk `hdiutil attach -nomount ram://$((1*512*1024*2))`

mkdir -p /Volumes/RamDisk/Caches/Chrome

mkdir -p /Volumes/RamDisk/Caches/Safari

mkdir -p /Volumes/RamDisk/Caches/Firefox/trade

mkdir -p /Volumes/RamDisk/Caches/Firefox/longtai

mkdir -p /Volumes/RamDisk/Caches/Thunderbird


fi

"

```