SSH接続を鍵認証で行う方法
目次
公開鍵と秘密鍵使った認証の概要
鍵認証とは、その名の通り鍵となるファイルを使った認証方式で、ちょうど鍵と錠前のように「公開鍵」と「秘密鍵」のペアを合わせることで認証される仕組みです。このうち「公開鍵」はサーバー側に設置しておき、「秘密鍵」をクライアント側に持っておきます。
秘密鍵を持っているクライアントだけが公開鍵のあるサーバーにログイン(ルートになるには、別途パスワードの入力が必要です)できるということで、他のPCからのアクセスを防ぐことができます。但し、秘密鍵を盗まれてしまうと、パスワードの入力だけでログインできてしまうのと、紛失してしまうと新たに作成しないとログインできなくなってしまうのでしっかりと管理します。
クライアント側で秘密鍵と公開鍵を生成する
ルートディレクトリに「.ssh」フォルダを作成します(無い場合)
$ mkdir .ssh
「.ssh」フォルダのパーミッションの変更
下記の通り変更しますクライアントPCがLinux OSを想定しています(Windowsでは未確認)
$ chmod 700 .ssh
キーペアの生成
「.ssh」フォルダに移動して次のコマンドで秘密鍵と公開鍵のキーペアを生成します。その際にパスフレーズも設定しますので、忘れないように控えておきます。
$ cd ~/.ssh/ $ ssh-keygen
鍵のファイルの確認
「.ssh」フォルダに秘密鍵ファイルである「id_rsa」と、公開鍵ファイルの「id_rsa.pub」が生成されているのを確認します。
補足:秘密鍵と公開鍵のキーペアで「id_rsa」「id_rsa.pub」と異なる名前にしたい場合(すでに存在していて名前が同じになる時など)はキーペア作成のコマンド入力後に表示される下記のタイミングでファイル名を変更することができます。
$ ssh-keygen // 通常時 Enter file in which to save the key (/Users/USERNAME/.ssh/id_rsa): /User/USERNAME/.ssh/id_rsa ↓ // ファイル名変更時 Enter file in which to save the key (/Users/USERNAME/.ssh/id_rsa): /User/USERNAME/.ssh/[id_rsaの変更後ファイル名]
これでキーペアが「変更後のファイル名」「変更後のファイル名.pub」になります。
公開鍵である「id_rsa.pub」の中身を下記コマンドで表示させて、その中身に書かれている内容を全てコピーします。
$ cat id_rsa.pub
サーバー側に公開鍵を設置する
公開鍵の設置
サーバーへログインして、先ほどと同じくログインユーザーのルートディレクトリに「.ssh」フォルダを作成しパーミッションを変更します。最後に「.ssh」フォルダへ移動しておきます。
$ mkdir .ssh $ chmod 700 .ssh $ cd ~/.ssh
公開鍵ファイルの生成
「.ssh」フォルダ内に「authorized_keys」というファイルを作成します。viエディタでファイルを作成し、先ほどクライアント側で作成した公開鍵「id_rsa.pub」の中身をペーストして保存します。
$ vi authorized_keys
公開鍵ファイルの設定
作成した「authorized_keys」のパーミッションを変更します。
$ chmod 600 authorized_keys
動作確認
一旦ログアウトして下記のコマンドを入力し公開鍵を使った方法でログインできるかを確認します。
$ ssh -i .ssh/id_rsa [USERNAME]@[HOSTNAME] -p [PORTNUMBER]
パスワード認証の禁止
ログインができれば、rootユーザーにスイッチして以降はユーザー名でのパスワード認証ができないように「sshd_config」ファイルを編集します。viエディタでファイルを開きます。
$ su - # cd /etc/ssh # vi sshd_config
ssh設定ファイルの変更
「sshd_config」ファイル内の下記の項目を次のように変更し保存します。
PasswordAuthentication yes (変更前) ↓ PasswordAuthentication no (変更後)
ルートでのログインを禁止
「sshd_config」ファイル内に有る設定を次の様に設定します。
PermitRootLogin no
設定の反映
SSHサーバーを再起動して変更内容を反映させます。最後に公開鍵認証でログインができ、ユーザー名とパスワードでのログインができなくなっているのを確認します。
# service sshd restart
これでペア鍵を持っているサーバーとクライアント間でしかログインができなくなりました。。