# 【Linux】SSH 跳板機設定

如果你經常需要透過主機A跳到主機B進行操作，可以考慮以下幾種方法來提升效率：

### 1. **SSH 跳板機設定 (ProxyJump 或 ProxyCommand)**

你可以在 `~/.ssh/config` 檔案中設定跳板機 (主機A) 和目標主機 (主機B)。

#### 方法一：使用 ProxyJump (推薦，簡潔且較新)

```lang-bash
   Host 主機B
       HostName <主機B的IP或主機名>
       User <使用者名稱>
       ProxyJump <主機A的使用者名稱>@<主機A的IP或主機名>

```

使用這個設定後，你可以直接用 `ssh 主機B` 連接到主機B，不需先登入主機A。

#### 方法二：使用 ProxyCommand (舊版本支援)

```lang-bash
   Host 主機B
       HostName <主機B的IP或主機名>
       User <使用者名稱>
       ProxyCommand ssh <主機A的使用者名稱>@<主機A的IP> -W %h:%p

```

這個設定同樣讓你直接 `ssh 主機B` 連接到主機B。

---

### 2. **SSH 快速別名設定 (使用別名簡化命令)**

你也可以在 `~/.bashrc` 或 `~/.zshrc` 中設定別名，直接執行一個指令來登入主機B。

```lang-bash
alias sshB='ssh -J <主機A的使用者名稱>@<主機A的IP或主機名> <主機B的使用者名稱>@<主機B的IP或主機名>'

```

之後，你只需要輸入 `sshB` 就能登入主機B。

---

### 3. **使用 SSH Multiplexing (重複利用 SSH 連線)**

如果你需要頻繁連線到同一個主機，可以開啟 SSH 連線複用功能，減少重複登入的時間：

在 `~/.ssh/config` 加入以下內容：

```lang-bash
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上存放私鑰：

```lang-bash
ssh -A <主機A的使用者名稱>@<主機A的IP>
ssh <主機B的使用者名稱>@<主機B的IP>

```

或者在 `~/.ssh/config` 啟用 Agent Forwarding：

```lang-bash
Host 主機A
    ForwardAgent yes

```

這樣就能直接將本地端的 SSH 金鑰轉發到主機A，並用來登入主機B。

---

### 5. **使用 `tmux` 或 `screen` (維持長時間工作環境)**

如果你的操作過程需要持續很長時間，建議在主機A或B上使用 `tmux` 或 `screen` 來保持工作環境，這樣即使斷線也能恢復。

#### 安裝並啟動 tmux：

```lang-bash
tmux new -s session_name

```

之後可以斷開連線並重新附加：

```lang-bash
tmux attach -t session_name

```

---

### 6. **使用 Ansible 自動化操作 (進階)**

如果你有固定的操作流程，可以使用 Ansible 寫 Playbook，批量操作多個主機，包括跳板機情境：

```lang-yaml
- 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** 設定最為方便、簡潔，推薦優先使用！