日常生活の物理|身近で体験できる科学のブログ

日常に関すること、何でもつぶやきます。物理的な視点を加えることが多いかも。

温湿度計作り (3) : Raspberry Piへのリモート接続

前回記事を書いてから、どうしてここまで更新があいてしまったのか。。
Raspberry Piの開発自体は楽しくて、裏で着々と進め、前回の状態から大分更新されています。ただブログ更新を完全に止めてました。。備忘録も兼ねて、更新内容を順に書きたいと思います。

 

まずリモート接続について、最初は普通にSSHでログインするところから。raspberry piIPアドレスは、wifiの文字の上にカーソルを合わせることで確認できます。IPアドレスに続く「/24」は無視して構わないようで、TCPポートは、raspberry piではデフォルトで「22」になっています。
ポート番号を変更するには、
>> sudo nano /etc/ssh/sshd_config
として、設定ファイルを開き、「# Port 22」とある部分の付近に「Port XXXXX」を追記します。sudo rebootで再起動して、設定を反映します。あとはTeratermを使ってログインできます。
コマンドプロンプトsshログインするなら、
>> ssh [username]@[ip] -p [port]
でログインできます。
参考URL:https://lotti.info/raspi-ssh/

 

…っと、ここまでパスワード認証方式でリモート接続したのですが、SSHで誰でもログインできる状態は不用心すぎやしないかと思い、下記サイトを参考に公開鍵認証方式に変えることにしました。

参考URL:https://monoist.atmarkit.co.jp/mn/articles/1912/11/news022_3.html

 

>>> ssh-keygen -t rsa
として、秘密鍵と公開鍵のキーペアを作成します。保存先のフォルダはデフォルトでよいです。途中で「Enter passphrase (empty for no passphrase):」が表示されるため、ここでは、秘密鍵を解くための新規パスフレーズを入力します。秘密鍵(id_rsa)と公開鍵(id_rsa.pub)の2つのファイルが「/home/newpiuser/.ssh」に作成されます。
Raspbianの初期状態では、公開鍵は「~/.ssh/authorized_keys」に配置変更し、authorized_keysファイルのパーミッションも下記のように設定するとのこと。
>>> cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
>>> chmod 600 ~/.ssh/authorized_keys
さらに、authorized_keysに書き込みしたので、不要となったid_rsa.pubを削除。
>>> rm ~/.ssh/id_rsa.pub
続いて、teratermの「ファイル」→「SSH SCP」を選択して、下段の「From:」へ「.ssh/id_rsa」と入力し、保存先をデスクトップに指定。「Receive」ボタンを押し、秘密鍵(id_rsa)ファイルをPCにダウンロードします。※「From:」には"~/"とか入れなくても".ssh/id_rsa"でOKです。
一度、Tera Termの接続を切断し、再度接続します。この時「RSA/DSA/ECDSA/ED25519鍵を使う」をチェックし、「秘密鍵」ボタンを押して、先ほどダウンロードした秘密鍵(id_rsa)ファイルを指定します。「ユーザー名」を入力し、「パスフレーズ」には先ほどキーペアを作成する時に指定したパスフレーズを入力します。秘密鍵のPASSにはデスクトップ上の「id_rsa」を選択。これで公開鍵認証方式で接続できることを確認します。
最後に、パスワード認証方式でのSSH接続を無効化します。「/etc/ssh/sshd_config」設定ファイルをテキストエディタで編集します。
>>> sudo nano /etc/ssh/sshd_config
ターミナルで設定ファイルの編集を行う「PasswordAuthentication no」を1行追加します。
>> sudo reboot
で再起動すれば、設定は反映されます。teratermでパスワード認証ではログインできないことを確認できればOKです。パスワード認証で、ユーザー名、パスフレーズを入れると、認証に失敗しました、となるはず。

 

ご参考までに、Teratermではなく、コマンドプロンプトから公開鍵認証方式でログインするときには、下記コマンドでログインできます。
>>> ssh -i C:\Users\User\Desktop\id_rsa [user]@[ip] -p [port]
パスフレーズを聞かれるので、入力します。

raspberry pi側のデスクトップを、丸ごとPC側にコピーしたいときは、scpコマンドを使います。開発途中でよく使いましたので、下記します。
>>> scp -i C:\Users\User\Desktop\id_rsa -p [port] -r [user]@[ip]:\home\username\Desktop\ C:\Users\User\Desktop\

 

リモートで開発できるようになると、USBハブやモニターも不要になります。前回までと比較すると、大分スッキリとした開発環境になりました。次回以降、センサデータを外部出力する方法をまとめていきます。

f:id:dailyphysics:20201129225252j:plain