【Linux】SSH 跳板機設定
如果你經常需要透過主機A跳到主機B進行操作,可以考慮以下幾種方法來提升效率:
1. SSH 跳板機設定 (ProxyJump 或 ProxyCommand)
你可以在 ~/.ssh/config
檔案中設定跳板機 (主機A) 和目標主機 (主機B)。
方法一:使用 ProxyJump (推薦,簡潔且較新)
Host 主機B
HostName <主機B的IP或主機名>
User <使用者名稱>
ProxyJump <主機A的使用者名稱>@<主機A的IP或主機名>
使用這個設定後,你可以直接用 ssh 主機B
連接到主機B,不需先登入主機A。
方法二:使用 ProxyCommand (舊版本支援)
Host 主機B
HostName <主機B的IP或主機名>
User <使用者名稱>
ProxyCommand ssh <主機A的使用者名稱>@<主機A的IP> -W %h:%p
這個設定同樣讓你直接 ssh 主機B
連接到主機B。
2. SSH 快速別名設定 (使用別名簡化命令)
你也可以在 ~/.bashrc
或 ~/.zshrc
中設定別名,直接執行一個指令來登入主機B。
alias sshB='ssh -J <主機A的使用者名稱>@<主機A的IP或主機名> <主機B的使用者名稱>@<主機B的IP或主機名>'
之後,你只需要輸入 sshB
就能登入主機B。
3. 使用 SSH Multiplexing (重複利用 SSH 連線)
如果你需要頻繁連線到同一個主機,可以開啟 SSH 連線複用功能,減少重複登入的時間:
在 ~/.ssh/config
加入以下內容:
Host *
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 10m
這樣在第一次登入主機A時,SSH 會保持連線,之後登入主機B就會變得更快。
4. 使用 SSH Agent 轉發 (Agent Forwarding)
如果主機A和主機B需要同一組 SSH 金鑰,可以使用 SSH Agent Forwarding,避免在主機A上存放私鑰:
ssh -A <主機A的使用者名稱>@<主機A的IP>
ssh <主機B的使用者名稱>@<主機B的IP>
或者在 ~/.ssh/config
啟用 Agent Forwarding:
Host 主機A
ForwardAgent yes
這樣就能直接將本地端的 SSH 金鑰轉發到主機A,並用來登入主機B。
5. 使用 tmux
或 screen
(維持長時間工作環境)
如果你的操作過程需要持續很長時間,建議在主機A或B上使用 tmux
或 screen
來保持工作環境,這樣即使斷線也能恢復。
安裝並啟動 tmux:
tmux new -s session_name
之後可以斷開連線並重新附加:
tmux attach -t session_name
6. 使用 Ansible 自動化操作 (進階)
如果你有固定的操作流程,可以使用 Ansible 寫 Playbook,批量操作多個主機,包括跳板機情境:
- name: Jump to 主機B via 主機A
hosts: 主機B
vars:
ansible_ssh_common_args: '-o ProxyJump=<主機A的使用者名稱>@<主機A的IP>'
tasks:
- name: Run shell command
command: <你的shell指令>
使用 Ansible 來批量執行,避免手動登入和操作。
這幾個方法可以根據需求選擇,ProxyJump 和 SSH Config 設定最為方便、簡潔,推薦優先使用!