管理画面を使わなくてもSSHからサクッと!【SSH公開鍵認証の設定】

SSH公開鍵認証とは

パスワード認証は、クライアントからサーバへ、ユーザ名とパスワードを送信すします。
一方、鍵交換方式の認証(SHH)は公開鍵暗号方式を利用し た認証なので、パスワードがネットワーク上を流れる事はありません。
よって、鍵が外部に漏れなけ ればパスワード認証よりもセキュリティを高める事が可能になります。

メリット
・セキュリティの向上(秘密鍵が漏れなければほぼクラックされない)
・パスワード無しでサーバーにログインできる
・設定で簡単にログインできる

デメリット
・最初の設定が面倒
・秘密鍵を忘れた場合、処理が大変(サーバー管理パネルでログインし、~/.ssh/authorized_keysを再 設定)

設定方法

クライアント側

ssh-keygen -t rsa -f ~/.ssh/ファイル名

// ex
ssh-keygen -t rsa -f ~/.ssh/bitbacket

ファイル名(秘密鍵)とファイル名.pub(公開鍵)の2種類のファイルができる。
ssh-keygenコマンドでパスフレーズを要求されるが無視して空にする。

サーバー側

SSHの設定を編集

sudo vim /etc/ssh/sshd_config
// RSA認証の許可
RSAAuthentication yes

// 公開鍵認証の許可
PubkeyAuthentication yes

// 鍵ファイルの置き場所
AuthorizedKeysFile .ssh/authorized_keys

// パスワードなしでの認証を許可しない(鍵認証に成功してから反映させないとログインできなくなる)
PasswordAuthentication no

sshdの再起動

sudos  service sshd restart

authorized_keysファイルの作成

ホームディレクトリに、.sshディレクトリがなければ作成する。
.sshディレクトリにauthorized_keysを作成し、中身を、クライアントで作った公開鍵(ファイル名.pub)にする。
すでにauthorized_keysがある場合、公開鍵の中身を追加する。

パーミッションの変更

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

ログイン

// 最初だけ
$ ssh -i ~/.ssh/ファイル名 ユーザ名@ホスト名

カスタマイズ

クライアント側の~/.ssh/configファイルを編集する

Host 名前(なんでも良い)
  HostName ホスト名
  IdentityFile ~/.ssh/ファイル名
  User ログインするユーザー名

Host test
  HostName example.com
  IdentityFile ~/.ssh/example
  User example

下記コマンドでログインできるようになる

ssh test

秘密鍵と公開鍵はセットなので、サーバーに公開鍵を設置することによりログインできる。したがって公開鍵は使い回しができる。

unsplash-logoPankaj Patel

Photo by Pankaj Patel on Unsplash