SSHに鍵認証を導入する

SSHに公開鍵と秘密鍵を使用した認証方式を導入する方法です。
秘密鍵を持っているユーザーしかSSHアクセスできなくなるので、当然セキュリティが高くなります。

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

作成の仕方はいろいろあるのですが、ここではTeraTerm(Windows)を使用して作成してみます。
まずはTeraTermを立ち上げて、設定⇒SSH鍵作成を選択します。

ssh001.png


そうすると、鍵の作成画面が立ち上がるので、

ssh002.png


生成ボタンをクリックします。
鍵の種類やビット数が変更可能ですが、デフォルトのRSA-2048bitで十分だと思います。

生成が完了すると公開鍵/秘密鍵の保存ボタンが有効になりますので、それぞれをファイルに保存します。
ファイルの拡張子は解説サイトによって様々ですが、自分は公開鍵は.pub、秘密鍵は.keyとしています。(参考までに

あと秘密鍵にはパスフレーズというものを設定でき、これを設定すると秘密鍵を使用(アクセス)する時にパスフレーズの入力を求められます。
もし仮に秘密鍵が流出してもパスフレーズを知らないと使うことができないということですね。
ただコレ、せっかくパスワード認証から鍵認証に切り替えたのに、パスワード(パスフレーズ)を入力するのは手間だ!と思う人もいると思います。
鍵を自分で作成して自分しか使わない人など、そんなときはパスフレーズは設定しないこともできます。

  • パスフレーズを設定せずに保存
    ssh003.png
    ssh004.png

  • パスフレーズを設定して保存
    ssh005.png

これで鍵の作成は完了です!

ちなみに、Windows7以降だとTeraTermのデフォルトフォルダに保存したファイルが見つからなくて困ることがありますw
そんな時は下記フォルダパスを見てみてください。

C:\Users\[ユーザー名]\AppData\Local\VirtualStore\Program Files (x86)\teraterm

VirtualStoreという機能だそうです。

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

では、作成した公開鍵をサーバーに設定しましょう。
まずは、SSHの設定です。

# vim /etc/ssh/sshd_config
RSAAuthentication yes                   # RSA認証の許可
PubkeyAuthentication yes                # 公開鍵認証の許可
AuthorizedKeysFile .ssh/authorized_keys # 公開鍵ファイルのパス
# service sshd restart

これで鍵認証が有効になったので、鍵を配置します。

# su - hoge
# mkdir ~/.ssh
# vim ~/.ssh/authorized_keys
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys

対象のユーザーのホームディレクトリ配下の指定したパスに配置します。
内容は公開鍵の内容をそのままコピペで。既にファイルが存在する場合は、次の行に追記でOKです。
あとは、ユーザー自身以外に編集権限があるとシステムに怒られるので権限を変更しておきます。
これでOK!

ついでにパスワード認証を無効にしたい場合には、下記設定に。

# vim /etc/ssh/sshd_config
PasswordAuthentication no    # パスワード認証の許可
# service sshd restart


クライアントに秘密鍵を設定する

では、最後に秘密鍵を使用して接続してみます。
といってもなにも難しいことはなく、パスワードの代わりに秘密鍵ファイルを指定してあげるだけです。
秘密鍵にパスフレーズを設定している場合には、いつもパスワードを入力しているところにパスフレーズを入力します
もちろん、ユーザー名も入力必須ですよw

ssh006.png