Macからlinuxサーバへsshポートフォワーディング経由で接続する方法

## 目的
手元のMacから踏み台サーバを経由して、linuxサーバへ接続できるようにする。
sshで踏み台サーバにアクセスしてから、さらにlinuxサーバにssh接続することも出来るが、二重でsshをすると、scpなどで必要なファイルをコピーするのが不便になる。そこで１回のsshコマンドでlinuxサーバへアクセスできるようにポートフォワーディングを使うことにする。

## 前提
- Linuxサーバの状態
SSH サーバが有効であり、公開鍵が登録されている

- windowsサーバの状態
OpenSSHがインストールされていて、外部からSSH接続が可能

- Macの状態
192.168.100系のネットワークに接続していること

## Network構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/c83b2773-c1ed-0cbe-4f36-4ed42e23180d.png)

Mac（192.168.100.90）から、Windows サーバ（192.168.100.140, 192.168.3.5）を経由して、別ネットワークにある Linux サーバ（192.168.3.4）に SSH 接続を確立し、ポートフォワーディングを使用して接続する。

## 踏み台PCの設定
### 1. Windowsサーバにsshサーバをインストールする
* スタートメニュー → 設定 → アプリ → オプション機能
* 「機能の追加」をクリックし、「OpenSSH サーバー」を検索
* 「OpenSSH サーバー」を選択し、「インストール」をクリック
* スタートメニュー → サービス (検索) → 「サービスアプリ」を開く
* サービスリストから 「OpenSSH SSH Server」 を探してダブルクリック
* スタートアップの種類を「自動」に設定し、「開始」をクリック

### 2. 踏み台PCに固定IPを振る
* スタートメニュー → 設定 → ネットワークとインターネット
* Wi-Fi or イーサーネットから編集するネットワークを選択
デフォルトゲートウェイやDNSサーバは適宜設定する。
![Pasted Graphic 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/93e2dbf9-5554-4f61-04b4-43d80d75ce72.png)
![192.168,100.1のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/d1da464c-4fab-f8f0-2707-fc2ac3640637.png)

### 3. Windows側のfirewallの設定でMac側で指定するポートに受信と送信が可能なように設定する
* タスクバーの検索ボックスに「Windows セキュリティ」と入力して開く
* 「ファイアウォールとネットワーク保護」をクリック
* 「詳細設定」リンクをクリックすると、「Windows Defender ファイアウォールの詳細設定」ウィンドウが開く
* 「受信の規則」をクリックし、受信ルールを作成
    #### 新しい受信ルールを作成
    * 「受信の規則」を選択した状態で、右側の「新しい規則」をクリック
    * 「ポート」を選択して「次へ」をクリック
![Pasted Graphic 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/eae98122-44b9-75ae-e864-d8406df97f0d.png)

    #### ポートの指定
    * 「特定のローカルポート」を選択し、2222 と入力します。
    * 「次へ」をクリックします。
![Pasted Graphic 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/5c5d96f0-06f5-d885-9abe-9915227f6c35.png)

    #### アクションの設定
    * 「接続を許可する」を選択し、「次へ」をクリック
    #### プロファイルの選択
    * 適用するプロファイルを選択します（通常はすべて選択）。
    * 「次へ」をクリックします。
    #### ルールの名前を設定
    * ルールにわかりやすい名前を付けます（例: "SSH Forwarding Port 2222"）。
    * 「完了」をクリックします。
    * 新しい規則がリストに表示され、「有効」になっていることを確認してください。
    * 同様に「送信の規則」で規則を追加して設定してください。

    ![Pasted Graphic 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950134/3dda3a54-eee8-ca63-ad9e-47f50b50196d.png)

    
## Mac側の設定

### sshのconfigファイルを書き換える
#### Macのhomeディレクトリ配下の.ssh/のconfigファイルに下記の設定を追加する
```
owner@fujiitatsuyanoMacBook-Pro .ssh % cat config 
ServerAliveInterval 60
TCPKeepAlive yes

Host linux-server
    HostName 192.168.3.4
    User linux-user-name
    ForwardAgent yes
    ProxyJump proxy-server
    LocalForward 2222 192.168.3.4:22

Host proxy-server
    HostName 192.168.100.140
    User windows-user-name
```

#### windows-server:　windowsサーバへの接続設定
ForwardAgent yes により、MacBook の ssh-agent に登録されている鍵を転送。
→ sshの認証がパスワードのみの認証の場合は不要

#### linux-server:
ProxyJump windows-server により、Windows サーバを経由。
LocalForward 2222 192.168.3.4:22 により、MacBook のローカルポート 2222 を Linux サーバのポート 22 に転送。


## sshポートフォワーディング出来ているかを確認
今回は公開鍵認証もあるので、ssh agentを起動させて、秘密鍵を登録しておく
```
ssh agent
cp /Users/owner/Downloads/id_rsa ./.ssh/id_rsa
ssh-add --apple-use-keychain ./.ssh/id_rsa
```
192.168.3.4のホスト名(linux-server)でssh接続を試みる
```
ssh linux-server
```