RaspberryPiのsshにパスワード無しでログインする方法(公開鍵認証方式とは)
前回の「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)
1 2 3 4 |
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys PasswordAuthentication no |
4,SSHクライアント側にも設定ファイル(.ssh/config)を作成すると、”ssh raspi”と入力するだけで公開鍵認証ログインが出来る
1 2 3 4 5 |
Host raspi HostName 192.168.1.101 User pi Port 28987 IdentityFile ~/.ssh/id_rsa |
また、HP作成などファイル転送をする時にはWinSCP等を利用すると思うのですが、これらも転送ソフトにもパスワードから秘密鍵に設定変更しないといけません。
ただしSSHの鍵には実は幾つか種類があり、WinSCPではputty形式でないと読み込んでくれない(簡単に変換できるので特に問題はない)
以下のサイトを参考にしました。
http://d.hatena.ne.jp/ushiday/20091001/1254394761