Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux SSH 多路複用:ControlMaster 實現連線共享與免密二次登入

編輯:Linux 系統常見問題解答

每次 SSH 登入都要輸入密碼/驗證碼很繁瑣?SSH 連線多路複用 讓首次建立連線後,同目標主機的後續連線共享既有 TCP 連線與認證狀態,實現「一次認證,多次免密」。本文詳細解析設定方法、原理與注意事項。

核心設定(~/.ssh/config)

Host *
    ControlMaster auto
    ControlPath /tmp/ssh-%r@%h:%p
    ControlPersist 30m          # 選擇性:主連線關閉後保持 socket 30 分鐘

參數詳細解析

參數說明
ControlMaster auto自動偵測:若無既有主連線則建立,否則共用現有 socket
ControlPathUnix Domain Socket 路徑模板:
%r=遠端用戶、%h=遠端主機、%p=埠號、%l=本地主機
建議至少含 %h%p%r 確保唯一性
ControlPersist主連線離開後 socket 保留時間(預設 0 即隨主連線關閉),避免頻繁重連

運作原理:Socket 共享而非 Session 複製

  1. 首次 ssh user@host:建立 TCP 連線、完成認證、在 ControlPath 建立 Unix Socket 檔案
  2. 後續 ssh user@host、scp、rsync、git push 等:偵測到同樣 %r@%h:%p 的 socket,直接透過 Unix Socket 轉發協定,完全繞過 TCP 三向交握與認證
  3. 主連線結束(或逾時):socket 移除,下次連線重新認證

驗證方式

ssh -v user@host 2>&1 | grep -i "control\|master\|socket"
# 輸出含 "Master connection"、"auto-mux" 等字樣即成功

優缺點與注意事項

優點缺點/風險
大幅縮短二次連線延遲(毫秒級)主連線中斷(Ctrl+C、網路斷)會導致所有共用連線強制斷開
減少 SSH 守護程序併發連線數不適用於需獨立認證/權限的場景(如 sudo 要求 tty)
配合 ControlPersist 適合腳本批次操作/tmp 目錄權限需注意(建議改用 ~/.ssh/controlmasters/)

進階搭配:動態密碼/OTP 場景

對於靜態金鑰認證,直接用 ssh-copy-id 部署公鑰最簡單。但動態密碼(OTP)、跳板機、VPN 後認證 等場景,公鑰無法使用,ControlMaster 成為「輸入一次 OTP,後續腳本全免驗證」的關鍵解法。

替代方案對比

  • ssh-agent + 金鑰轉遞:適用金鑰認證,需 ForwardAgent yes
  • tmux/screen:會話層面持久化,非連線層面共享

善用 ControlMaster,讓 SSH 操作如同本地終端般流暢,是系統管理員與開發者的效率倍增器。

Copyright © Windows教程網 All Rights Reserved