リモートサーバーに公開鍵認証でssh接続するための手順

インフラ

はじめに

リモートサーバーを利用するときにはssh接続をすると思います。今回はリモートサーバーに公開鍵認証でssh接続する方法を説明します。

公開鍵認証とは

まず公開鍵認証について説明します。公開鍵認証とはssh接続するときの接続方法の一つです。ssh接続するときにはパスワード認証で接続できるのですが公開鍵認証の方が鍵を持った人のみがログインできるのでパスワード認証よりもセキュアでありますし、パスワードを入力する手間も省けて楽です。

ローカルホスト(手元のMacとかWindowsとかの環境)に秘密鍵を、リモートサーバー(レンタルサーバーなど)に公開鍵を配置することで公開鍵認証ができるようになります。

パスワードでログインできることを確認

すでにパスワード認証でsshができる場合はこの項目は飛ばしてください。まず前提としては以下のようにしてパスワード認証でssh接続ができるか確認します。

ssh <ユーザー名>@<ipアドレス or ホスト名> -p <ポート番号>

鍵の生成

公開鍵認証をするための鍵をローカルホストで生成します。

まずディレクトリを移動します。(ない場合は作成してください。)

$ cd ~/.ssh

次に鍵を作成します。-tは鍵のタイプを指定するものです。この場合RSA暗号の鍵が生成されます。
Enter passphrase (empty for no passphrase): と聞かれるのですがここは何も入力せずEnterを押せばOKです。何も入力をしないことでssh接続する際にパスワードが不要になります。

$ ssh-keygen -t rsa

ssh-kygenによって以下の二つの鍵が生成されます。
秘密鍵はローカルホストに、公開鍵はリモートサーバーに配置します。

  • id_rsa (秘密鍵)
  • id_rsa.pub (公開鍵)

秘密鍵の配置

次に秘密鍵を配置をし、パーミッションを変更します。
秘密鍵はローカルホストのどの場所に配置しておいても問題ないのですが~/.sshディレクトリ下がいいと思います。

$ mv id_rsa ~/.ssh
$ chmod 600 id_rsa

公開鍵の配置

次に公開鍵をリモートサーバーに配置します。
リモートサーバー上の~/.ssh/authorized_keysファイルに公開鍵の情報をコピーする必要があります。
scpコマンドやFTPソフトの利用などやり方は色々ありますが以下のコマンドを利用すれば公開鍵をリモートサーバーに送らなくてもいいので簡単です。

-iオプションで配置する公開鍵を指定しています。
-pオプションでポート番号を指定します。指定しなければデフォルトの22番で接続します。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub <ユーザー名>@<ipアドレス or ホスト名> -p <ポート番号>;

これで鍵認証が有効になり、以下のコマンドでパスワードなしでリモートサーバーに接続することができるようになります。

ssh <ユーザー名>@<ipアドレス or ホスト名> -p <ポート番号>;

これでリモートサーバー上の~/.ssh/authorized_keysファイルに公開鍵の情報が書き込まれます。

configファイルの設定

上記の設定で鍵認証でのssh接続ができるようになったのですが、いちいちユーザー名とホスト名を入力すると手間がかかります。
sshのconfigファイルを利用することでssh接続のコマンドを省略することができます。

Host blog
   Hostname 123.456.789
   User remote_user
   IdentityFile ~/.ssh/id_rsa
   Port 22

configファイルを保存したらターミナルを再起動してください。
これで、ssh remote_user@123.456.789 -p 2222と入力していたものがssh blogでできるようになります。