セキュリティ対策2. 公開鍵認証でssh接続をする

2013年2月7日

どうも、ボブです(違います)。
トップの画像が意味わからない状態かもしれませんが気にしないでください。
女子も男子も少なからず頭にある時期でしょう。そうでしょう。

さて、今まではパスワードを入力してssh接続をしていました。でもこれじゃまだ危険なのだそう。
パスワード認証は、使っているPCからサーバーへ、ユーザー名やパスワードを平文で送信してログインします。これらの情報はネットワーク上を流れているので漏洩の可能性は高く、いったんバレてしまったらどこからでも入られてしまう。
ですので、ssh接続にはパスワード認証よりも、パスワードがネット上に流れない「公開鍵認証」というものを使ったほうが良いようです。

OsukiniサーバーAirでWordPress!目次

1. 会員登録と申し込み
2. サーバーに接続する
3. セキュリティ対策1. ssh接続のポート番号を変更する
4. セキュリティ対策2. 公開鍵認証でssh接続をする
5. WordPressインストール事前準備1. Apacheの設定
6. WordPressインストール事前準備2. PHPとMySQLの設定
7. 独自ドメインを設定する
8. WordPressをインストールする
9. WordPressの基本設定をする

公開鍵認証でssh接続をする

公開鍵認証って何?
暗号化についての概念的な話なら「アリスとボブ」を、と社内の人に言われました。
私の勝手な解釈で説明すると…

ボブ(自分のPC、送信者)が公開鍵と秘密鍵という一対の鍵を作って、公開鍵をアリス(サーバー、受信者)に渡し、秘密鍵を自分で持っておきます。
アリスはボブにデータを送る時、ボブから渡された公開鍵を使って暗号化します。ボブは自分の秘密鍵を使ってデータを開きます。
データは暗号化された状態で配送されるので安心!アリスのデータはボブにしか開けません(´∀`人)
アリスの公開鍵が他の人に渡ってしまっても、その公開鍵でデータを開くことはできません。ボブの秘密鍵でしか開けません(´∀`人)
秘密鍵がバレてしまっては元も子もないので、秘密鍵の管理だけは厳重にしなければいけませんが、それさえしっかりしておけば、パスワード認証よりはるかに安全。安心だネ!


ほう!安心だネ!
ということでやってみよう。

公開鍵と秘密鍵を生成する

ターミナルを起動したら、keygenコマンドで鍵を生成します。keygenはkey generate(キー生成)の略。
MacName:~ UserName$ ssh-keygen
キーペア生成中…
RSAというのは公開鍵暗号方式の1つだそうです。
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/UserName/.ssh/id_rsa).
保存先のデフォルトは「/Users/ユーザー名/.ssh/id_rsa」、特に変更がなければEnterキーを押します。
Created directory '/Users/UserName/.ssh'.
Enter passphrase (empty for no passphrase):
パスフレーズを聞かれます。10文字くらいの文を入れましょう。
公開鍵は、このパスフレーズによって更に暗号化されます。公開鍵が流出しても不正利用を防ぐためです。
確認のために2度聞かれるので、同じ文を入力してEnter。
Your identification has been saved in /Users/UserName/.ssh/id_rsa.
Your public key has been saved in /Users/UserName/.ssh/id_rsa.pub.
The key fingerprint is:
**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** UserName
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
「/Users/UserName/.ssh/」フォルダに公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が保存されました!

…で、保存されたはずの.sshフォルダ、最初はMacで非表示になっていたんですよね…。探してもそんなフォルダ見当たらない!
Windowsでは見えるのにMacでは見えない「.DS_Store」ファイルなどもデフォルト非表示なので、これらと同じ状態になっている様子。
なので非表示ファイルを表示させました。これもターミナルで行います。
MacName:~ UserName$ defaults write com.apple.finder AppleShowAllFiles TRUE
1度Enterを押した後、次は下記のように入力します。
killall Finder
入力後Enter。これで非表示フォルダが見えるようになりました。(画像ではユーザー名がGuestになっています)

半透明になっているフォルダがデフォルト非表示だったものです。.sshフォルダの中にはちゃんとキーペアが入っていますね。
ターミナルでviエディタを開いて中身を確認するでも良かったのですが、でもこうやってアイコンが見えると安心するというか(爆)。

秘密鍵は自分のPCに大事にとっておきますが、もし他の人に見られないようにしたいのであれば、パーミッションを変更しておきます。
MacName:~ UserName$ cd .ssh
MacName:.ssh UserName$ chmod 600 id_rsa
.sshディレクトリに移動(cd)、id_rsaファイルのアクセスモードを変更(chmod)という意味になります。
600は所有者のみ読み書きOK、それ以外は不可。

公開鍵をサーバーに設置する

公開鍵をサーバーに送信するのには、scpというファイル転送コマンドを使いました。
MacNaMacName:.ssh UserName$ scp -P 10022 id_rsa.pub ユーザー名@IPアドレス:
10022番ポートを指定しているのですが、Pは大文字でなければいけないようです。(。_。)φメモメモ
小文字で「-p」と入力したら、デフォルトの22番に接続しにいってタイムアウトを起こしていました…。
Enterを押すとパスワードを聞かれるので、いつものパスワードを入力します。
ユーザー名@IPアドレス's password:
id_rsa.pub                                          100%  414     0.4KB/s   00:00
送信完了。
サーバーにログインして、ファイルがちゃんと転送されているかlsコマンドで確認します。
lsは「ディレクトリの中身を見せて」っていう意味。
[ユーザー名@ホスト名 ~]$ ls
id_rsa.pub
アップロードされた公開鍵が表示されました。

次はここに.sshというディレクトリを作成してパーミッションを700(所有者のみ読み書き実行OK)に変更し、公開鍵を.sshディレクトリにコピーします。
[ユーザー名@ホスト名 ~]$ mkdir .ssh
[ユーザー名@ホスト名 ~]$ chmod 700 .ssh
[ユーザー名@ホスト名 ~]$ cp id_rsa.pub .ssh/
.sshディレクトリに移動して中身を確認してみます。
[ユーザー名@ホスト名 ~]$ cd .ssh
[ユーザー名@ホスト名 .ssh]$  ls
id_rsa.pub
公開鍵の名前を「authorized_keys」に変更し、パーミッションを600にします。
[ユーザー名@ホスト名 .ssh]$ mv id_rsa.pub authorized_keys
[ユーザー名@ホスト名 .ssh]$ chmod 600 authorized_keys
コピー元の鍵は削除しましょう。
[ユーザー名@ホスト名 .ssh]$ cd ../
[ユーザー名@ホスト名 ~]$ rm id_rsa.pub

新規ウィンドウでサーバーにログインしてみて、公開鍵のパスワードが聞かれたら成功!

ログインもちゃんとできました。
Identity added: /Users/UserName/.ssh/id_rsa (/Users/UserName/.ssh/id_rsa)
Last login: Tue Feb 5 16:35:35 2013 from xxx.xxx.xxx.xxx
[ユーザー名@ホスト名 ~]$

sshの設定を変更する

上記の設定だけでは、まだ公開鍵認証とパスワード認証の2通りでログインができる状態です。
パスワード認証を無効にするためのsshの設定変更が必要です。
suコマンドでスーパーユーザーになって、「/etc/ssh/」ディレクトリのsshd_configファイルを編集しましょう。
[ユーザー名@ホスト名 ~]$ su
Password:
[root@ホスト名 ユーザー名]# vi /etc/ssh/sshd_config
ファイルを開いたら、パスワードによるログインを不可にします。「PasswordAuthentication」という記述を探して…
#PasswordAuthentication yes
PasswordAuthentication no
コメントアウトされたyesの行の下に空白行を追加し、noの記述を入れました。
:wで保存、:qでviエディタ終了。そしてssh再起動。
# /etc/init.d/sshd restart
sshd を停止中:                              [ OK ]
sshd を起動中:                              [ OK ]
これでログイン時にパスワードを聞かれなくなりました!
ね、簡単でしょ?(ボブ)


——————–

簡単でしょとか言いつつ…
上の記事には書いていないですけど、ターミナルと同時にWindows PCからTera Termでも確認していたので、ちょっと時間がかかりました。
あとは自宅PCからも入れるようにしようかなぁ。

ちなみにボブの絵画教室はリアルタイムで見たことはありません。
「探偵!ナ○トスクープ」で爆笑したのが最初かな?