ssh 接続する際にパスワード入力を省略したい
公開鍵認証を使用すればパスワード入力が不要になる。
以下の話はmac前提だが、最近はWindows10も公式でopensshが組み込まれるようになっているらしいので、流れとしては同様に可能だろう。
クライアント側で鍵を作る
詳しい仕組みは省くが、公開鍵認証は二つの鍵によって行われる。秘密鍵と公開鍵がある。
秘密鍵
ネットワーク上に晒してはならないという意味で秘密だと思っていれば良いと思う。
バレるとまずいヤツ、である。
公開鍵
ネットワーク越しに使用するものである。
バレても問題ないヤツ、である。
クライアントで鍵を生成し、秘密鍵を使う。そして、サーバ側に(事前に)公開鍵を渡し、認証に利用する。
具体的にrsa暗号鍵を作るコマンドが以下である。
$ ssh-keygen -t rsa
この後適当に(凝りたい方は色々できるのでどうぞ)Enter連打すると、ディレクトリ~/.ssh/以下等にid_rsa/id_rsa.pubというファイルが出来上がっている。 id_rsaが秘密鍵id_rsa.pubが公開鍵である。
念の為書くと、複数の接続先がある場合も、公開鍵をそれぞれに渡すだけなので、鍵は1回作れば良い。
逆に秘密鍵を紛失した場合、全ての公開鍵は意味がなくなる。
公開鍵を渡す
公開鍵id_rsa.pubをSBC(サーバ)に渡したい。例えば以下のようなコマンドで実現できる。
$ scp ~/.ssh/id_rsa.pub pi@raspberrypi.local:~
ssh copy コマンドを使用している。ここではまだパスワード打つ必要がある。
サーバ側で鍵を登録する
おそらく上記のコマンドで渡された公開鍵はホームディレクトリにある。
この状態ではなんの意味もない。
~/.ssh/authorized_keysファイルを作成し、そこに公開鍵の中身を写す必要がある。例えば以下のように行う。
code:bash
# ~/.ssh/authorized_keys が存在するとき
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub
# ~/.ssh/authorized_keys が存在しないとき
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
mv authorized_keys ~/.ssh/
以上で、とりあえずはsshで公開鍵認証が使えるはずである。
接続は以下のようにする。
$ ssh pi@raspberrypi.local -i id_rsa
(~/.ssh以下に秘密鍵がある場合、オプション-iは省略できる感じ。実際できたのでそう思ったが、気のせいかもしれない。)
セキュリティ的にもっとしっかりしたいとか、そういう個々の要望は各自で解決されたい。