跳到主內容

【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 設定最為方便、簡潔,推薦優先使用!