モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

Raspberry Pi で ssh 通信が切れる場合の対応例

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

公開日公開日
2016/04/06
最終更新最終更新
2021/11/30
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    0
    ステッカーを贈るとは?

    ssh 通信が切れる

    先日、無線 LAN が標準搭載された Raspberry Pi 3 が発売されましたね。それ以前は USB 無線子機などを利用して Wi-Fi 接続する必要がありました。私の保有する Raspberry Pi は少々古くて B+ モデルです。いろいろな人の記事をみて、どうやら PLANEX 無線LAN子機 GW-USNANO2A が評判がよさそうなので購入して設定してみたところ確かに無線通信できるようになりました (SSID やパスワード設定方法は省略)。

    ところが困ったことに ssh 通信していると結構な頻度で通信が切れてしまいます。

    いろいろな記事があるけれど

    原因は主に二種類あるようです。

    • USB 無線子機が省電力モードに入ってしまう
    • ssh の仕様で一定期間通信がないと切断される

    いろいろと検索すると省電力モードにしないための設定が出てきますが、私の環境ではどれを試してもうまくいきませんでした。Raspberry Pi の OS や無線子機によって有効だったり有効じゃなかったりする対処法ばかりでした。

    もっと一般的な対処方法があります。

    ssh -o ServerAliveInterval=1 pi@192.168.179.4
    

    -o ServerAliveInterval=1 というオプションを付与するだけです。これは

    ~/.ssh/config

    Host pi
      HostName 192.168.179.4
      User pi
      ServerAliveInterval 1
    

    と ssh 設定ファイルを編集してから

    ssh pi
    

    としても同じです。パスワードはご存知のとおり raspberry ですね。

    何が起きているのか

    パケットキャプチャしてみましょう。

    sudo tcpdump host 192.168.179.4
    

    PC (192.168.179.3) から Raspberry Pi (192.168.179.4) に一秒ごとにパケットが送信されています。

    00:51:55.399364 IP 192.168.179.3.55623 > 192.168.179.4.ssh: Flags [P.], seq 5334:5390, ack 6370, win 4096, options [nop,nop,TS val 399702904 ecr 217335], length 56
    00:51:55.404845 IP 192.168.179.4.ssh > 192.168.179.3.55623: Flags [P.], seq 6370:6410, ack 5390, win 815, options [nop,nop,TS val 217436 ecr 399702904], length 40
    

    このため無線 LAN 子機が省電力モードに切り替わることもないですし SSH がタイムアウトすることもありません。通信が途切れるときは以下のようなパケットキャプチャが得られます。

    01:22:06.325687 ARP, Request who-has 192.168.179.4 tell 192.168.179.3, length 28
    

    ARP で 192.168.179.4 の MAC アドレスを検索したときに Raspberry Pi が反応してくれていません。

    ping を打ちつづけるという別の方法

    ssh の途中で通信が切れることはなくなりましたが、ssh を閉じているときに USB 無線 LAN 子機が省電力モードに入ってしまうと今度はそもそも ssh できなくなってしまいます。USB 無線 LAN 子機を抜き差しすれば復活しますが、面倒です。かといって、汎用的に省電力モードを無効化できる方法も見当らない。どうしたらいいのか。ping を打ち続けるというのがシンプルでスマートな方法の一つです。

    デフォルトゲートウェイに ping を打ちつづける

    sudo ping 192.168.179.1
    

    外部の適当なサーバーに ping を打ちつづける (怒られそう)

    sudo ping www.example.com
    

    これで bot などを動かしているときに通信ができなくなる事態を回避できますね。Raspberry Pi 起動時にこれが自動で実行され始めるように設定しておくと快適になりそうです。/etc/rc.local という Windows のスタートアップのようなファイルに以下の一行を exit 0 よりも前に追加してみましょう。sleep 30 は無線 LAN が利用できるようになるまでの待ち時間を適当に調整してください。

    sleep 30 && nohup ping www.example.com > /tmp/ping.log 2>&1 &
    

    再起動してから確認してみましょう。

    tailf /tmp/ping.log
    

    うまくいっていれば ping が継続実行されています。

    64 bytes from 93.184.216.34: icmp_seq=1 ttl=50 time=130 ms
    64 bytes from 93.184.216.34: icmp_seq=2 ttl=50 time=129 ms
    64 bytes from 93.184.216.34: icmp_seq=3 ttl=50 time=131 ms
    64 bytes from 93.184.216.34: icmp_seq=4 ttl=50 time=143 ms
    64 bytes from 93.184.216.34: icmp_seq=5 ttl=50 time=146 ms
    ...
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • 任意の言語で Raspberry Pi デジタル入出力、アナログ出力 (PWM)
        サムネイル画像-ae21424afa
        python を用いた例 書籍や公式ドキュメントなどを見ると、Raspberry Pi は python を (発音が似ているからでしょうか) 標準的な言語としてサポートしているように思われます。python には GPIO を操作するライブラリが標準で導入されています。 デジタル出力 #!/usr/bi
      • Qoosky API + Raspberry Pi5 でLチカしてみた
        はじめに 今回は、Qoosky APIという、WebSocketを利用してインターネット接続されているArduinoやラズパイと通信できるAPIを利用して、Rapsberry Pi 5 でLチカをしてみました!この記事では、Qoosky APIの概要や特徴に触れたあと、Qoosky APIを利用したRapsberry Pi 5 でのLチカまでの方法についてご紹介させていただきます! Qoosky ...
        RSTRST2/24/2025に更新
        いいねアイコン画像1
      • Android Things による LED 点灯 (Raspberry Pi 3)
        サムネイル画像-cd5f619bd1
        電子工作や製品のプロトタイピング (例『地球規模で遠隔操作できるブルドーザー』) で利用される Raspberry Pi 3 について、 Android Things アプリケーションを開発できます。 本ページでは、簡単な例として LED を点灯させるアプリケーションを扱います。より実用的なアプリケーションを開発する際には [GitHub (Android Thin
      • Raspberry Pi 無線接続時の IP 固定
        wlan0 の IP 固定方法 Raspberry Pi の SSID とパスワード設定は終わっている前提で以下のファイルを編集します。 $ sudo vi /etc/network/interfaces 以下の 4 行を一番最後に追加します。適宜自分の環境用に IP を変えてください。 iface wlan0 inet static address 192.168.179.1
        OharaOhara11/30/2021に更新
        いいねアイコン画像0
      • Raspberry Pi アナログ入力 (I2C A/D コンバータ)
        サムネイル画像-23105da2a8
        ADS1015 について Raspberry Pi には A/D コンバータが内蔵されていません。デジタル入出力、アナログ出力に加えてアナログ入力を行うためには外部 IC を利用する必要があります。ここでは I2C デバイスの ADS1015 を利用します。事前に I2C 設定を行っておいてください。 ![](