Raspberry Pi 日記

長嶋 洋一


2013年5月22日(水)

水曜日である。 後期の水曜日は1限が大学院科目、2限に芸文科目のメディアアーツ論、そして4-5限にサウンドデザイン演習、さらに放課後にアカペラと週の講義科目を全て集めたヘヴィな日であるが、前期は講義科目が月・火なので、水曜日は放課後のアカペラだけ、という「お仕事の日」である。 昨日ふーみんにメイルした質問の返信も届いて、朝から全開で頑張る筈であったが、こういうタイミングで将棋名人戦第4局の2日目なのであった(^_^;)。 過去に浜松で開催された時には このように 見に行ったこともあり、別にニコニコ動画の有料中継を見るわけではないが、とりあえずウインドウの一角に2ちゃんの将棋スレで遅々として流れてくる情報はウォッチしつつの一日となる。 昨日の1日目の「▲3七銀」までが定跡、という話題から、その定跡の最初の記録が1848年だという話題に、 このページ を改訂したり・・・と、あれこれ回り道をした。

見ましたが・・・なんか謎ですねぇ。

まず、一般論で、config fileの編集ですが、
sudo nano /etc/ssh/sshd_config
のように、nanoというテキストエディタが標準で使えます。
#vi を使うのは今や私のようなロートルくらいです・・・

sshのリスタートは、
sudo service ssh restart
で出来ます。

それでsshですが、まず、RPi 上で、ローカルホストに
sshできるかどうか確認してみてください。
ssh pi@127.0.0.1
で、これで接続できなければローカルになにか問題がある気がします。

ローカルホストに接続できるようなら、iptablesが設定されていないか、
以下で調べられます。
pi@raspberrypi ~ $ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ただ、RPiの Wheezyではファイアウォールの設定はないはずなので、
わざわざ設定してなければかかってないはずで、上記のようになっている
はずだと思います。

特にRPiの設定をいじっていなければ(というかいじってないはずだと
思うんですが)、RPi の初期のsshの設定はむしろアブナイんじゃないかという
くらいオープンな設定になってます。

Mac側で、セキュリティソフトやファイアウォールで、sshのアクセスを
許可するホストが個別に設定されてたりしないでしょうか。
お手数ですが、まずそのあたりをチェックしてみてください。

ただ、ローカルホスト(127.0.0.1)への接続ができない場合、
sshdの設定がおかしい可能性もあります。
その場合、
sudo cp /etc/ssh/sshd_config /boot
として、その後RPiの電源を切り、取り出したSDカードを
Macなどで読んでみてください。

/boot だけは普通のWindows のFAT32システムになってます
(要するに普通のDOSパーティション)。なので、ここにコピーしておけば
MacやWindowsで普通に読み出すことができます。

読みだしたsshd_configをメールで送ってもらえればチェックできると
思います。
以上が、ふーみんからのメイルであった。頼もしい師匠である(^_^)。 とりあえず、SDカードに保存したファイルをRaspberry Piを切って、外から読み出す方法がまずは収穫である。 さっそく実行して(当然のことながらsudoが必要と判明)、「sshd_config」と、ついでに「ssh_config」も添えて、まずは このように 取り出したものをふーみんにメイルしてみた。 今日のパソコンの2画面は以下のようなカンジである。 ニコニコ動画の無料ライブ中継とそのミラーサイトはこの状態から進展がまったく無いのは判っているので閉じたが、けっこう画面を占有されている(^_^;)。

そしていよいよ、SSHに向けて、ふーみんメイルの最初からなぞっていく事にした。 まず、テキストエディタ「nano」であるが、以下のようにちゃんと動くことを確認した。 日本語環境はx-windowの中だけは実行できているので、基本的にはRaspberry Piが起動したら「startx」を起動して、その中でお仕事することにしよう。 「startx」の自動起動については、設定方法は確認しているが、行わない方針である。

sshdのリスタートは、最初、「sudo service sshd restart」とやって叱られたが(^_^;)、ふーみんメイルにあるように「sudo service ssh restart」であった。 ちゃんとメッセージが出て、ここまでOKと確認した。 次は「Raspberry Pi上でローカルホストにsshできるかどうか」である。 これも、「ssh pi@127.0.0.1」に対して最初のログインのための確認が出て、ログインが出来た。 ここまで問題ナシである。

まだホストPCからのコピペが出来ないので(そのためのSSHである(^_^;))、ふーみんメイルを慎重に手打ちする。 「ローカルホストに接続できるようなら、iptablesが設定されていないか」というところである。 以下の部分は、ふーみんの書いてくれた、そのまま同じであった。

pi@raspberrypi ~ $ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
そして、「Mac側で、セキュリティソフトやファイアウォールで、sshのアクセスを許可するホストが個別に設定されてたりしないでしょうか」であるが、研究室内のパソコンとRaspberry Piとは同じハブに刺さっていて、ファイアウォールは通過していない。 さらに、僕はポリシーとして、これまでの人生で、一度もセキュリティソフトを使っていないのである(^_^;)。 従って、ホスト側でssh先を禁止する術は無いのであった。 これでふーみんメイルの内容確認は終わりとなった。 ちょうど昼前に、いつもの薬をもらいに医者に行く予定があったので、ここで中断である。

そしてお昼に医者から帰ると、ふーみんからのメイルが届いていた。 「ちょっとググった感じ、Macだとホスト認証の鍵を自動で設定しないような雰囲気もあります。 Mac側で、"ssh-keygen -R 172.16.65.118 "としてから、RPiにssh してみてください」という事だったが、やってみると以下のように駄目だった(^_^;)。

nagasm-Mac-mini:~ nagasm$ ssh-keygen -R 172.16.65.118
/Users/nagasm/.ssh/known_hosts updated.
Original contents retained as /Users/nagasm/.ssh/known_hosts.old
nagasm-Mac-mini:~ nagasm$ ssh pi@172.16.65.118
ssh: connect to host 172.16.65.118 port 22: Connection refused
nagasm-Mac-mini:~ nagasm$
これに「駄目だった」と返信しつつ、フト思いついた事があり、以下のようにふーみんにメイルした。
ちょっと思いついたのですが、Raspberry Piを
3セットまで立ち上げるように周辺を揃えたので、
2台ないし3台のRaspberry Piを同時にハブに繋いで
立ち上げて、そいつら同士でsshしてみます。
そして後述のふーみんのメイルが届くのと入れ違いに、以下のように、2台を並べて立ち上げたRaspberry Piのそれぞれからお互いに、あっさりとssh出来たのである(^_^)。

こうなると、問題はMacの方である。MacからMacへはssh出来たが(当然か(^_^;))、少なくともRaspberry Pi同士でssh出来るのだから、Raspberry Piのsshdはちゃんと正しく動いているのである。 そしてふーみんから入れ違いに届いたメイルも、以下のようにまさにそこを指摘していた。

どうもMac側のsshにクセがあるような感じがします。

これから授業なので夕方まで反応できませんが、
とりあえずprivate network内限定であれば、
sudo apt-get install inetutils-inetd telnetd
としてtelnetdを入れ、
sudo nano /etc/hosts.allow
に、
in.telnetd: 172.16.65
を追加(172.16.65.0/24、と同じ意味です)してから
sudo /etc/init.d/inetutils-inetd restart
で、telnetで接続してしまったほうが楽かもしれません。
うーーむ、遂に、懐かしのtelnetかぁ(^_^)。 まさに、ローカルでの実験なのでtelnetで十分なのだ。 ちょうど、SSHが出来たらアプリケーションの追加という「apt-get」に挑戦しようと思っていたので、これは渡りに船である。 チラチラと名人戦もチェックしつつも、午後のお勉強としては最良のネタである。(^_^)

そこで2台でかさばっていたRaspberry Piを再び片付けて1台にして、x-windowから「sudo apt-get install inetutils-inetd telnetd」としてみると、なんと以下のように、ネット上をRaspberry Piのサイトに取りに行くということで、タイムアウトで失敗した(^_^;)。 そう、研究室からSUACの外に出て行くには、プロキシサーバを経由するので、ブラウザ「midori」で設定しているように、プロキシサーバの設定とパスワードが要るのであるが、この「apt-get」にはそんな立派な機能は無いのだ。 別プロセスのブラウザでプロキシサーバ経由で学外にアクセスする状態にしてから、改めてトライしても、結果は変わらなかった。

pi@raspberrypi ~ $ sudo apt-get install inetutils-inetd telnetd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  inetutils-inetd telnetd
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
184 kB のアーカイブを取得する必要があります。
この操作後に追加で 338 kB のディスク容量が消費されます。
エラー http://mirrordirector.raspbian.org/raspbian/ wheezy/main inetutils-inetd armhf 2:1.9-1
  'mirrordirector.raspbian.org' が一時的に解決できません
エラー http://mirrordirector.raspbian.org/raspbian/ wheezy/main telnetd armhf 0.17-36
  mirrordirector.raspbian.org:80 (89.16.177.202) へ接続できませんでした。 - connect (110: 接続がタイムアウトしました)
http://mirrordirector.raspbian.org/raspbian/pool/main/i/inetutils/inetutils-inetd_1.9-1_armhf.deb の取得に失敗しました
  'mirrordirector.raspbian.org' が一時的に解決できません
http://mirrordirector.raspbian.org/raspbian/pool/main/n/netkit-telnet/telnetd_0.17-36_armhf.deb の取得に失敗しました
  mirrordirector.raspbian.org:80 (89.16.177.202) へ接続できませんでした。 - connect (110: 接続がタイムアウトしました)
E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください
上のRaspberry Piのx-window内のターミナルに表示されたメッセージは、もう一つターミナルを開けて、そこからテキストエディタ「nano」を開いて、そこにコピペしてファイルに書き出し、これをsudoで「/boot」にコピーして、Raspberry Piをシャットダウンして、SDメモリカードをMacに入れて読み出したものである。 なかなかに原始的であるが、これによって、指定されている「telnetd_0.17-36_armhf.deb」をMacでインターネットからゲットして、再びSDカードに戻してRaspberry Piに入れられないか・・・という作戦である(^_^;)。

すると、Macのブラウザが見た目はフリーズしてしまった。 ステータスバーを見た感じでは、「ftp.jaist.ac.jp」つまり日本のミラーサイトをアクセスしようとしているのだが、いつまでたっても繋がらないのである。 ここで思い出したのが、SUACのファイアウォール(プロキシサーバ)は、「:80」というような指定のURLを通さなかったのでは・・・という遠い記憶である。

そこで今度は、出張用のMacBookAirとPHSを用意して、研究室からPHSのダイヤルアップでネットに直接接続して、まず「telnetd_0.17-36_armhf.deb」をダウンロードした。 ところが「inetutils-inetd_1.9-1_armhf.deb」のURLを入れると「Not Found」となる(^_^;)。 そこで上位ディレクトリに移動すると、バージョンが上がって「inetutils-telnetd_1.9-2_armhf.deb」があったのでゲットした。 ついでに、隣りに並んでいた「inetutils-ftpd_1.9-2_armhf.deb」と「inetutils-ftp_1.9-2_armhf.deb」と「inetutils-telnet_1.9-2_armhf.deb」もゲットして、全てSDカードの「/boot」領域にコピーして、再びRaspberry Piに入れて立ち上げた (以下のように画面のラズベリーの色がピンクでなく青になってドキッとしたが、次にリブートしたら、何故か直った)。

これを「/boot」から、とりあえずカレントの「/home/pi」にコピーして、再び試みたが、結果は同じだった。 CQ本には「sudo apt-get install telnetd」というのも書いてあったので試したが、今度は以下のようなメッセージが出て駄目だった(これもsudoで/boot以下に書いたファイルをMacに移動している)。 なんとか、ネットから別途にゲットしたこれらを直接指定してインストール出来ないのかなぁ・・・というあたりで、まさに行き詰まった。

pi@raspberrypi ~ $ ls
Desktop                            log1.txt
indiecity                          log2.txt
inetutils-ftp_1.9-2_armhf.deb      ocr_pi.png
inetutils-ftpd_1.9-2_armhf.deb     python_games
inetutils-telnet_1.9-2_armhf.deb   telnetd_0.17-36_armhf.deb
inetutils-telnetd_1.9-2_armhf.deb
pi@raspberrypi ~ $ sudo apt-get install inetutils-telnetd
E: ロック /var/lib/dpkg/lock が取得できませんでした - open (11: リソースが一時的に利用できません)
E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。これを使う別のプロセスが動いていませんか?
pi@raspberrypi ~ $ sudo apt-get install telnetd
E: ロック /var/lib/dpkg/lock が取得できませんでした - open (11: リソースが一時的に利用できません)
E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。これを使う別のプロセスが動いていませんか?
pi@raspberrypi ~ $ 
ここで5限の時間帯になった。 ぼちぼちアカペラの準備とかもあり、名人戦もまったく見ていなかった(^_^;)。 とりあえず今日はここまでとして、また明日にトライしてみよう。

「Raspberry Pi日記」トップに戻る