Day22 SSHの公開鍵認証設定の続き

Day21では、鍵の作成をMacでおこなってハマってしまった。そこで見方を変えて、Raspberry Piで鍵を作成して、秘密鍵をMacに渡すという方針を取った。

#piにて
#鍵作成
ssh-keygen -t rsa

これで、~/.ssh/以下に、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が追加される。
#まずは、公開鍵の内容を~/.ssh/authorized_keysに追記
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

#追記が終われば公開鍵は消去してよい
rm ~/.ssh/id_rsa.pub

#次に、~/.sshのディレクトリに対するアクセス権を700、~/.ssh/authorized_keysのアクセス権を600に変更する。これにより、他のユーザからはこれらのディレクトリやファイルを閲覧できなくなる。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

最後にMacの~/.ssh/に秘密鍵'(~/.ssh/id_rsa)を移動する。
ログアウトしてMacに戻ってから、

#-Pのpを大文字にしないとハマる

#Macのホームディレクトリ(~)にサーバー(pi)の~/.ssh/をダウンロード
scp -P hogenumber pi@192.168.11.7:~/.ssh/authorized_keys ~/



あとは、piにログインして、鍵の後始末と、パスワードによるログインを禁止するだけ。
#再度piにログイン
ssh -p hogenumber pi@192.168.11.7

#追記が終われば秘密鍵も消去してよい
rm ~/.ssh/id_rsa

#パスワードによるログインを禁止する
sudo vim /etc/ssh/sshd_config

52 PasswordAuthentication yes
52 PasswordAuthentication no
に変更

#sshサーバを再起動
sudo /etc/init.d_ssh restart


あとは接続のテストだけ。
勿体ぶるようだが、確実に鍵の効果を検証するため、一度~/.ssh/id_rsaをホームディレクトリに入れておいて、エラーになるかを見てみる。デフォルトで~/.sshの鍵を探すようになっているので、この方法をとった。

あらかじめ、鍵のアクセス権は600に変更しておく
sudo chmod 600 ~/id_rsa

#id_rsaを指定せずにログインを試みる
ssh -p hogenumber pi@192.168.11.7
Permission denied (publickey).

それでは、鍵を指定しみる。
ssh -p hogenumber -i ~/id_rsa pi@192.168.11.7

すると、以下のウィンドウが開くので、piで鍵を作成するときに入力したパスワードを入力する。
すると、ログインに成功する。
Last login: Mon Mar 31 08:59:43 2014 from 192.168.11.2

pi@raspberrypi ~ $ 
exit


Macの~/.ssh以下にid_rsaをおいておけば、いちいち指定しなくても自動で読みにいく。そこで、~/id_rsaを~/.ssh/に移動させる。
mv ~/id_rsa ~/.ssh

ログインのテスト


ssh -p hogenumber  pi@192.168.11.7
Last login: Mon Mar 31 08:59:43 2014 from 192.168.11.2

pi@raspberrypi ~ $ 


うまくいった。



iphoneのiOS用SSHクライアントであるpromptからパスワードログインを試みるとはじかれることを確認してみる。


ばっちり。

promptでssh接続したいときは、Macの時と同様、サーバーで鍵を作成し、公開鍵の内容をサーバーの~/.ssh/authorized_keysへ追記、秘密鍵をpromptに登録すればよい。

piで作った秘密鍵をMacに落としておいて、
itunesを開いて、AppsのPromptを選択肢、id_rsaをAddで追加すればよい。
あとは、iphone上でpromptを開いて、ipアドレス、ポート番号、ユーザ名、パスワード(この場合、鍵作成時のパスワード)を入力して、最後に鍵マークをクリックして先ほどアップロードしたファイルを選択すればok。
あとはお好みで、他のパソコンにも鍵を入れておいても良い。
これでサーバーのセキュリティに関しての、一通りの作業は終了した。


###############################################################

最後にひとつ議論しておく。
鍵の作成を今回のようにサーバーで行うか、クライアントで行うかというのは実はどちらでもよいそうだ。

以下のサイトが詳しい。
秘密鍵と公開鍵は、サーバー側(ssh接続される側)で作ろうがクライアント側(sshコマンドを打って接続しに行く側)で作ろうが、どっちでもいいそうな。

通常は、クライアントで作成して、サーバーに公開鍵を送信する事が多いようだが、大量に鍵を作成するときは面倒なので、サーバー側で作成して、クライアントに配布するという形式を取る事もあるそうだ。