RaspberryPiのsshにパスワード無しでログインする方法(公開鍵認証方式とは)

RaspberryPiのsshにパスワード無しでログインする方法(公開鍵認証方式とは)
1

前回の「RaspberryPiのセキュリティ設定について」は、意外とアクセスがあるので、よりセキュアな状態にするお話です。

RaspberryPiのセキュリティ設定について


sshでログインされると非常に困るので、前回はsshのポートを変更したり、パスワードを設定したりしましたが、まだまだセキュリティを突破される可能性はあります。

不安要素その1 ポート番号は2バイト(0-65535)しかないので、ポートスキャン(全てのポートに対して開放されているかどうか試す)で、わりとsshの利用ポートがバレる。
不安要素その2 パスワードも英数字8文字程度だと安全とは言いがたい(辞書攻撃や総当りでログインされる可能性は否定できない)

不安要素その1については、根本的に対処しようがないのでとりあえず放置。
不安要素その2は、パスワードを使わない公開鍵認証という方式があります。これは素因数分解の困難性を利用した認証です。

公開鍵認証の原理は、以下の様な感じになります。

1,公開鍵と秘密鍵を作る
a, 秘密鍵は充分に大きな数字の素数を2個用意する(ここでは分かりやすいように991,997とする。実際には10進数で数百桁の素数を使う)
鍵の長さ1024bit = 308桁
鍵の長さ2048bit = 616桁
鍵の長さ4096bit = 1233桁
b, 公開鍵は秘密鍵をかけたもの。ここでは991*997=988027となる

2,設定する
a, sshサーバ側に「988027」という数値をセットします(コレが公開鍵)
b, 接続してきたクライアントに対しては「988027(公開鍵)」は、素数を2つかけたものだが、その素数を2つ答えろ!と要求します。
この問題は「素因数分解」といいますが、簡単に求める式がないためコンピュータでも答えを出す事が出来ない(総当りすれば別だが、組み合わせ爆発となる。鍵の長さが重要)
c, 正規のクライアントなら、最初から正解を知っているのでサーバに秘密鍵(991,997)を渡し、サーバ側は掛け算をするだけで正解!と分かります。

ドアをロックする鍵と開ける鍵が別々にあって、それがペアで存在するイメージですね(現実の鍵は共通鍵)

さて、実際にRaspberryPiのSSHへのログイン方法を変更してみましょう。
以下のサイトを参考にしました。
https://tool-lab.com/2013/11/raspi-key-authentication-over-ssh/

やることとしては、
1,パソコンで公開鍵・秘密鍵を作成する(ssh-keygen -t rsa)
2,RaspberryPiのログインするユーザフォルダ直下に公開鍵を置く(.ssh/authorized_keys)
3,SSHの設定ファイルを修正して再起動(/etc/ssh/sshd_config)

4,SSHクライアント側にも設定ファイル(.ssh/config)を作成すると、”ssh raspi”と入力するだけで公開鍵認証ログインが出来る

また、HP作成などファイル転送をする時にはWinSCP等を利用すると思うのですが、これらも転送ソフトにもパスワードから秘密鍵に設定変更しないといけません。
ただしSSHの鍵には実は幾つか種類があり、WinSCPではputty形式でないと読み込んでくれない(簡単に変換できるので特に問題はない)

以下のサイトを参考にしました。
http://d.hatena.ne.jp/ushiday/20091001/1254394761