ラズパイにLANを経由せず無線でssh接続する方法(2種類)

## はじめに
本記事では、無線LANを経由せずにラズパイとPCを直接無線で接続してssh接続する方法として、以下の2種類を紹介します。

- **方法1**. PCからWi-Fiアクセスポイントを建てて、ラズパイに接続してもらう方法
- **方法2**. ラズパイからWi-Fiアクセスポイントを建てて、そこへPC側から接続する方法

ちなみに、本記事で紹介するこれらの方法以外にも、

- ラズパイをPCと同じ無線LANに接続しておく方法
- ラズパイとPC(またはLAN)をLANケーブルで有線接続する方法

などがありますが、これらを使用できない場面は多々存在します(学校や職場で固定の無線LANが使えない状況など)。

本記事で紹介する方法を使えば、無線LANが存在しない場所でもラズパイとPCさえあれば、これらの間で直接無線で接続できて便利です。

## 事前準備
### sshの有効化
デフォルトだとssh接続は無効になっているので、事前に有効化しておく必要があります。
以下の記事に従って、sshを有効化しておいてください。
→ [ラズパイへのssh接続を有効化する方法(2020年版)](https://qiita.com/m4saka/items/e79f8a4b4e24dcd99406)

### Wi-Fi無線子機の用意(デスクトップPCの場合のみ)
当たり前ですが、ラズパイに無線接続するにはPCがWi-Fi接続を利用できる必要があります。
デスクトップPCは通常Wi-Fi接続が使用できないので、別途以下のような無線LAN子機を接続しておいてください。
<a href="https://www.amazon.co.jp/TP-Link-433Mbps-Archer-T2U-Nano/dp/B07MXHJ6KB/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=kbl-22&linkId=c8c0ae8aae6b35cb9d9ce5d663f796e4&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07MXHJ6KB&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=kbl-22&language=ja_JP" style="margin-bottom:0 !important"><br>TP-Link WiFi 無線LAN 子機 AC600 433Mbps + 200Mbps Archer T2U Nano</a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=kbl-22&language=ja_JP&l=li2&o=9&a=B07MXHJ6KB" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"  />

## 方法1. PCからアクセスポイントを建て、ラズパイに接続してもらう方法
この方法は下図のようなイメージです。PCからいわゆる「テザリング」を行い、それに対してラズパイが接続するような形です。
![方法1のイメージ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/d6fbb61f-90da-aa6c-df95-86a9924be448.png)

ここではWindows 10を想定して手順を説明します。
macOSの方はこちらの記事を参照すると似たようなことができると思います→https://link-man.net/tips/47343/

1. タスクトレイ内のネットワークのアイコンをクリック
2. 「モバイル ホットスポット」ボタンを右クリック→「設定を開く」をクリック
   ![方法1 手順1・2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/59764602-f725-ce81-281a-36558e94e312.png)
3. ウィンドウ上部のボタンをクリックし、モバイルホットスポットを「オン」にします。これによって、PC側からWi-Fiアクセスポイントが建てられます。  
   ![方法1 手順3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/323b8da1-023d-2e8b-988b-d7d4dfa90106.png)  
   ネットワーク名(SSID)とパスワードがウィンドウ下部に表示されます。これらはウィンドウ下部の「編集」ボタンで編集が可能なので、必要に応じて適宜変更してください。
4. ラズパイ側からこのWi-Fiアクセスポイントへ接続します。初回のみこれを行えば、次回からは自動で接続されるようになります。
   - **GUIの場合のやり方**: 右上の電波アイコンをクリックし、先ほど確認したネットワーク名・パスワードのものへ接続します。  
     ![方法1 手順4](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/5db69485-85af-ccbd-283c-b94e465984c0.png)
   - **CUIの場合のやり方**: `sudo vi /etc/wpa_supplicant/wpa_supplicant.conf`を実行し、末尾に以下の記述を追記してください。なお、vimはiキーで入力開始、Escキー→「:wq」→Enterキーで上書き保存・終了できます。  
     ([ネットワーク名]と[パスワード]の部分は適宜書き換えること)

    ```
    network={
           ssid="[ネットワーク名]"
           psk="[パスワード]"
           key_mgmt=WPA-PSK
    }
    ```
5. すると、PC側のモバイルホットスポットのウィンドウ内の「接続されているデバイス」に「raspberrypi」というデバイスが自動的に出てきます。ここに表示されたIPアドレスが、接続先のラズパイのIPアドレスです(接続毎に変わることがあるので注意)。
   ![方法1 手順5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/2e80aade-54b3-fd14-87dd-9e1a5555e361.png)
6. あとは、コマンドプロンプトを開いてssh接続するだけです。なお、パスワードはデフォルトの場合「raspberry」となっています。

    ```:PC側のコマンドプロンプト上で実行
    ssh pi@raspberrypi.local
    ```
    コマンドプロンプトでsshコマンドを実行する代わりに、PuTTYやTeraTermなどのソフトウェアを使用しても構いません。
    また、もし「raspberrypi.local」というホスト名で上手く接続できない場合は、代わりに5.で赤線部分に表示されたIPアドレスを使用してみてください(例:`ssh pi@192.168.137.236`)。

以上の手順が方法1のやり方です。

セットアップはまあまあ大変でしたが、2回目以降の接続は以下の手順だけ行えば大丈夫です。

1. PC上でモバイルホットスポットを有効化する  
   → すると、ラズパイが自動的に接続してくれる
2. ラズパイに対してssh接続する

## 方法2. ラズパイからアクセスポイントを建て、そこへPC側から接続する方法
方法1は便利なのですが、以下のような問題があります。

- 1台のラズパイに複数台のPCから同時にssh接続できない
- 複数台のPC・複数台のラズパイを使用する場合、それぞれを個別に接続することができない
- PC側で使用するWi-Fi無線子機によってはモバイルホットスポットが使用できない(APモードに対応していない)場合がある
- PCがホットスポットを建てるにはインターネットに接続されている必要がある(屋外で使用できない)
    - Windowsの「モバイル ホットスポット」のボタンはPCがインターネットに接続された状態でないと出てこない

これらの問題は、下図のようにラズパイからWi-Fiアクセスポイントを建てる方法を使用することで解決できます。

![方法2のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/7b64c1a7-d3d7-7b78-001d-7c9970c7f3ee.png)

以下の手順で設定してください。

1. 以下のコマンドを実行し、[create_ap](https://github.com/oblique/create_ap)(Linux上でWi-Fiアクセスポイントを建てるためのサービス)をインストールします

    ```:create_apのインストール
    $ sudo apt install hostapd dnsmasq iptables
    $ git clone https://github.com/oblique/create_ap.git
    $ cd create_ap
    $ sudo make install
    ```
2. `sudo vi /etc/create_ap.conf`を実行し、設定が以下のようになるよう編集してください。ここで指定したネットワーク名(SSID)とパスワードが、ラズパイから出るWi-Fiアクセスポイントのものになります。

    ```
    WIFI_IFACE=wlan0
    INTERNET_IFACE=lo
    SSID=[任意のネットワーク名]
    PASSPHRASE=[任意のパスワード]
    ```
3. 以下のコマンドを実行してcreate_apサービスを有効化します

    ```:create_apサービスの有効化
    $ sudo systemctl enable create_ap
    $ sudo systemctl start create_ap
    ```
4. すると、PC上で先ほど設定したアクセスポイントが接続先一覧に表示されるので、これに接続します(画像はSSIDをraspberrypiに設定した場合の例)
   ![方法2 手順4](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192805/f46c294d-8c81-be39-006d-12bcab4d835c.png)

5. あとは、コマンドプロンプトを開いてssh接続するだけです。なお、パスワードはデフォルトの場合「raspberry」となっています。

    ```:PC側のコマンドプロンプト上で実行
    ssh pi@raspberrypi.local
    ```
    コマンドプロンプトでsshコマンドを実行する代わりに、PuTTYやTeraTermなどのソフトウェアを使用しても構いません。
    また、もし「raspberrypi.local」というホスト名で上手く接続できない場合は、代わりにIPアドレス「10.0.0.1」を使用してみてください(例:`ssh pi@10.0.0.1`)。

こちらもセットアップはまあまあ大変でしたが、2回目以降の接続は以下の手順だけ行えば大丈夫です。

1. ラズパイを起動すると自動的にアクセスポイントが出てくるので、PCから接続する
2. ラズパイに対してssh接続する

### 方法2はそのままだとラズパイからインターネットが使えない
方法2は屋外でも使えるなどのメリットがある反面、そのままだとラズパイからインターネットが使用できません。
そのため、aptやgit等のインターネット接続が必要なコマンドを使用するには、ひと工夫必要です。

詳しくは以下の記事で解説しているので、こちらを参照してください。
→ [接続先のサーバーへインターネット接続を共有しつつssh接続する](https://qiita.com/m4saka/items/b9defd7542eee3551759)

上記記事の手順を実施することで、以下のようなコマンドを使用してインターネット接続が使用できるようになります。

```:PC側からのssh接続方法(-Rオプションでラズパイ側の6666番ポートにプロキシを建てる)
ssh pi@raspberrypi.local -R6666
```
```:上記記事の手順後のaptやgitの使い方の例(※proxychainsのインストールと設定が必要)
$ sudo proxychains apt update
$ proxychains git pull
```

ただし、上記記事の方法には「ラズパイに接続するためのネットワークアダプタ」と「インターネット接続のためのネットワークアダプタ」の計2つのネットワークアダプタが必要になります。

そのため、ノートPCで上記記事の方法を行う場合は、インターネット接続用のWi-Fi無線子機を新たにPCに接続する、もしくはノートPCをイーサネット(有線LAN)でインターネットに接続する必要が生じる点に注意してください。

## まとめ
ラズパイへの無線でのssh接続方法として、2種類の方法を紹介しました。

それぞれの主なメリット・デメリットは以下の通りです。

- **方法1** (PCからアクセスポイントを建てる方法)
    - メリット
        - ラズパイからインターネットを使用する際に特に面倒がない
    - デメリット
        - 複数台のラズパイを同時に使う場合や、複数台のPCを同時に使う場合に対応できない
        - 屋外などインターネット接続がない状況では使えない

- **方法2** (ラズパイからアクセスポイントを建てる方法)
    - メリット
        - 1台のラズパイに複数台のPCから同時にssh接続できる
        - 屋外などインターネット接続がない状況でも使える
    - デメリット
        - gitコマンドなどを使う際、インターネットに繋ぐのが面倒

一長一短ありますが、個人で1台だけ使う場合は方法1の方が簡単で便利だと思います。

## 補足: スマホからも接続可能です
本記事で紹介した方法は、PCの代わりにスマートフォンを使用することもできます。

- 方法1の場合
    - スマートフォン上のインターネット共有(テザリング)機能を使用
        - PC上で設定したものと同じSSID・パスワードを指定してインターネット共有する
        - すると、スマートフォンが出すアクセスポイントへ、ラズパイ側から自動的に接続される

- 方法2の場合
    - スマートフォン上のWi-Fi接続先として、ラズパイから出ているアクセスポイントを選択

これらのいずれかの方法でラズパイと接続した上で、ssh接続します。
スマートフォンからssh接続するには、iOSやAndroidに端末アプリ(Termius等)をインストールしてください。

- Termius iOS版 (無料):  
  https://apps.apple.com/jp/app/termius-ssh-client/id549039908
- Termius Android版 (無料):  
  https://play.google.com/store/apps/details?id=com.server.auditor.ssh.client&hl=ja%3Futm_source%3Dapac_med