なぜ、ssh接続?
ラズパイを使う時、Mac / Linux / PC からネットワーク接続して使うと何かと便利です。専用のディスプレイ、キーボード、マウスを用意しなくて良いので、とても気軽。
その際、ssh接続だと毎回パスワードを入力しなくて良いのでさらに便利。セキュリティ面でも安心。気軽で便利で、かつ安心ということです。
クラスで使う時など、たくさんラズパイがあるときには必須。
前提
- Macからの接続(ローカル)
- Raspbian Stretchへの接続(リモート)
- パスワード認証によるローカル〜リモート間SSH接続ができている。
- リモートホスト名がhostname001の時、名前解決によりhostname001.localでアクセスできている。
ssh hostname001
と打つだけで、ターミナル接続ができるようになります。
ローカル(Mac)で鍵ペアを作成する。
ssh-keygen -t rsa
~/.ssh/に作成される。
秘密鍵:id_rsa
公開鍵:id_rsa.pub
リモート(ラズパイ)に公開鍵を転送/登録
ssh-copy-id pi@hostname001.local
ssh-copy-idコマンドが無い場合、brew install ssh-copy-id
でインストール。このコマンドの中身は実はスクリプトです。cat `which ssh-copy-id`
で確認できます。
.sshディレクトリ(存在しない場合は作成)とその中にauthorized_keysファイルが作成され、公開鍵id_rsa.pubが中に収容される。別の鍵がすでに存在する時は、authorized_keysに追記される。
同じ鍵を送ろうとすると、すでにありますと言って何もしない。素晴らしい。scpやsftpなどを使うより格段に楽で間違いも起きない。
公開鍵登録後、すぐに鍵による接続が可能になります。
エイリアスで接続できるようにする
エイリアスで接続できるようにすると、さらにさらに簡単接続。
ただし、scpコマンドなどssh関連コマンドで使われる他、Transmit5などのアプリでも使われる場合があるので、設定したことを忘れていると、今までできていた接続ができなくなって慌てます。
通常のコマンド行
ssh pi@itrobot001.local
エイリアス利用の場合、こんなに簡単。
ssh itrobot001
nano .ssh/config
CheckHostIP no
User pi
Port 22
IdentityFile ~/.ssh/id_rsa
Host itrobot*
HostName %h.local
Host primbell*
HostName %h.local
Host nao2g-server
HostName %h.local
CheckHostIP no known_hostsにIPアドレスを書き込まなくなる。IPアドレスが変わった時の面倒がなくなる。
User pi コマンド行でユーザー名を省略できる。
Port 22 コマンド行でポート番号を省略できる。22以外の番号にしている時など便利。
Host コマンド行のホスト名でフィルタリング。
Hostname ホスト名を指定する。
%h コマンド行で指定したホスト名が使われる。
パスワード認証を廃止したり、ルートログインを禁止したり、する?
セキュリティを考える場合、従来のパスワード認証を廃止、ルートでのログインを禁止などの設定をリモート(ラズパイ)のファイル編集にて行なうと良いです。設定に失敗すると、ネットワーク接続での作業が続行できなくなるので、慎重に。
sudo nano /etc/ssh/sshd_config
パスワード認証廃止。デフォルトはyes。
PasswordAuthentication no
ルートでログインできなくする。デフォルトはyes。
PermitRootLogin no
デフォルトでyesだが、明示的に公開鍵認証を可能にする。
PubkeyAuthentication yes