Raspberry PiとMac or Windows PCを有線で直接繋いでさくっとSSH接続する

Raspberry PiにSSH接続したいけど、外出中のときや、ルーターやハブが目の前にないときに、Zeroconfという仕組みを利用してRaspberry PiのIPアドレスを調べたりせずにさくっとSSH接続できる方法を紹介します。

# 動作環境および準備
## リモート(Raspberry Pi)側
- Raspberry Pi 3 Model B
    - Raspbian Jessie Lite 2016-09-23
        - イメージをMicroSDに書き込んだ直後の状態
    - Raspbian Jessie Lite 2016-11-25
        - このバージョンからSSHが**デフォルトでは無効**になりました。
        - イメージをMicroSDに書き込んだ後、MicroSDのルートディレクトリに`ssh`という名前で空のファイルを作成しておく必要があります。
        - macOSであれば、`touch`コマンドを用いて`touch /Volumes/boot/ssh`といった要領で空のファイル`ssh`を作成できます

<img width="400px" src="https://qiita-image-store.s3.amazonaws.com/0/137045/1de72a72-607c-94ad-9bca-fa9e0ef08624.png">

## ホスト側
- MacBook Pro (Retina, 13-inch, Early 2015)
    - macOS Sierra
    - 外付けLANアダプター
        - BUFFALO LUA3-U2-ATX (https://www.amazon.co.jp/dp/B002IT5ZPG)
            - USB2.0 to Ethernet
            - 実売価格:1,089円程度
            - ドライバーインストール不要で認識した
        - Apple Thunderbolt - ギガビットEthernetアダプタ

- Let's note S10
    - Windows 10
        - SSH接続にTera Term (http://forest.watch.impress.co.jp/library/software/utf8teraterm/)
        - **iTunesまたは[Bonjour Print Services](https://support.apple.com/kb/DL999?locale=ja_JP&viewlocale=ja_JP)がインストールされていること**
            - Bonjourというサービスがインストールされ、Zeroconfが利用できるようになります。IPアドレスを調べなくてもSSH接続ができます。
    - 標準搭載のLANポート

|Mac|Windows PC|
|---|---|
|![PB271172.jpg](https://qiita-image-store.s3.amazonaws.com/0/137045/5de70c48-638a-73e0-22eb-c3253fbe8740.jpeg)|![PB271173.jpg](https://qiita-image-store.s3.amazonaws.com/0/137045/dafdc941-72d2-4ed2-4683-c1efdca2e2e2.jpeg)|

# SSH接続してみる

Raspberry PiにRaspbianが入っているMicroSDを入れて、電源を入れます。OSが起動するまで1分ほど待ちます。

## macOS
```console:macOS
$ ssh pi@raspberrypi.local
```

パスワードを聞かれるので、 `raspberry`  と入力してreturnキーを押します。

```console:macOS
pi@raspberrypi.local's password: 
```

繋がるはずです。

```console:Raspbian
pi@raspberrypi:~ $
```

うまく繋がらない場合は、以前接続した際の設定が残っている可能性があるので、known_hostsの設定削除を行ってください。

```console:macOS
$ ssh-keygen -R raspberrypi.local
```

## Windows
今回はTera TermでSSH接続してみます。

初めての方は、タスクマネージャー(Ctrl+Shift+Esc)でBonjour Serviceが実行中になっているか確認しましょう。

![ssh-win-04.png](https://qiita-image-store.s3.amazonaws.com/0/137045/a3645344-08e0-f0d1-c847-8ba1b0de9c5f.png)

Tera Termを起動し、ホストに `raspberrypi.local` と入力します。

![ssh-win-01.png](https://qiita-image-store.s3.amazonaws.com/0/137045/d984f965-526f-ec1e-9f6e-f5e4e8a84d47.png)

ユーザー名に `pi` 、パスフレーズに `raspberry` と入力しEnterキーを押します。

![ssh-win-03.png](https://qiita-image-store.s3.amazonaws.com/0/137045/622987de-dcf7-98ac-577b-94c23db3d20e.png)

繋がるはずです。

```console:Raspbian
pi@raspberrypi:~ $
```

# ブリッジ接続もしてみる
Mac or Windows PCでSSH接続ができた後、Raspberry Pi側で `apt-get` や `wget` といったインターネットを必要とする操作をするときに、Mac or Windows PCが接続している回線をRaspberry Pi側でも利用できるようにします。

例として、iPhoneをUSBでMac or Windows PCと接続してテザリングするケースを紹介します。

## macOS

システム環境設定の「共有」を開き、左側のサービスの一覧にある「インターネット共有」を選択します。
共有する接続経路を「iPhone USB」 とし、LUA3-U2-ATXを接続した場合は、ポート「AX88772」、Thunderbolt - ギガビットEthernetアダプタを接続した場合は、ポート「Thunderbolt Ethernet」にチェックを入れます。
<img width="780" alt="bridge-mac-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/8b491315-b367-3793-b90c-e750b199bcd2.png">

左側のサービスの一覧にある、インターネット共有にチェックを入れ、インターネット共有機能を開始します。
<img width="780" alt="bridge-mac-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/32fe7ed9-9532-17aa-1e29-1f3b22faaadd.png">

再びSSH接続すると、pingで応答が帰ってくるはずです(control+Cで終了)

```console:Raspbian
pi@raspberrypi:~ $ ping www.google.co.jp
```

## Windows
スタートメニューで「ネットワーク接続の表示」と検索して、ネットワーク接続の画面を開きます。

iPhoneとRaspberry Piを接続しているアダプターの両方を選択し、右クリックをしてブリッジ接続をクリックします。

![bridge-win-01.png](https://qiita-image-store.s3.amazonaws.com/0/137045/5b3a60d5-6016-76a7-9ac4-50bebde80a7f.png)

再びTera TermなどでSSH接続すると、pingで応答が帰ってくるはずです(Ctrl+Cで終了)

```console:Raspbian
pi@raspberrypi:~ $ ping www.google.co.jp
```



# ホスト名を変えてみる
`/etc/hostname` の中身を見てみます。

```console:Raspbian
pi@raspberrypi:~ $ cat /etc/hostname
```

初期設定では、内容が `raspberrypi` となっているはずです。

例として、 `my-rpi` に変更してみます。
Raspbianの設定ツールを起動します。

```console:Raspbian
pi@raspberrypi:~ $ sudo raspi-config
```

7 Advanced Options → A2 Hostname でホスト名を変更できます。

```console:Raspbian
pi@raspberrypi:~ $ sudo reboot
```

 で再起動すると、 `raspberrypi.local` の代わりに `my-rpi.local` でSSH接続できるようになるはずです。

```console:Raspbian
pi@my-rpi:~ $
```

# 参考サイト
- [SSH接続エラー回避方法：.ssh/known_hostsから特定のホストを削除する/削除しないで対処する3つの方法](http://qiita.com/grgrjnjn/items/8ca33b64ea0406e12938)