ssh接続を公開鍵認証にする - Naohiro2g/Raspberry-Pi-Projects GitHub Wiki

前提

  • Macからの接続(ローカル)
  • Raspbian Stretchへの接続(リモート)
  • パスワード認証によるローカル〜リモート間SSH接続が出来ている
  • WindowsでもGit-bashをつかって、あとは同じ手順でオッケー。

さらに、リモートホスト名をhostname001とし、名前解決によりhostname001.localでアクセスできる前提。

ローカル(Mac)で鍵ペアを作成する。

ssh-keygen -t rsa

~/.ssh/に作成される。 秘密鍵:id_rsa 公開鍵:id_rsa.pub

リモート(ラズパイ)に公開鍵を転送/登録

ssh-copy-id [email protected]

後述のエイリアス設定をしている場合は、.localが不要になったりするので注意。

.sshディレクトリ(存在しない場合は作成)とその中にauthorized_keysファイルが作成され、公開鍵id_rsa.pubが中に収容される。

同じ鍵を送ろうとすると、すでにありますと言って何もしない。別の鍵を送ると追記してくれる。素晴らしい。

公開鍵登録後、すぐに鍵による接続が可能になる。

パスワード認証を廃止したり、ルートログインを禁止したり、する? リモートでのファイル編集。

sudo nano /etc/ssh/sshd_config

パスワード認証廃止。
PasswordAuthentication no

ルートでログインできなくする。
PermitRootLogin no


デフォルトでyesだが、公開鍵認証を可能にする。
PubkeyAuthentication yes

エイリアスで接続できるようにする

ssh関連コマンドで使われる他、Transmit5などのアプリでも使われる場合があるので、注意。

通常のコマンド行
ssh [email protected]

エイリアス利用の場合
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 コマンド行で指定したホスト名が使われる。