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

インフラ

リモートサーバーを利用するときには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接続する際にパスワードが不要になります。
-tで生成する鍵の種類を指定することができます。

$ ssh-keygen -t rsa

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

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

-fでファイル名を指定することもできます。例えば以下のようなコマンドを実行するとtesttest.pubという鍵のペアが作成されます。 

$ ssh-keygen -f test -t rsa

秘密鍵の配置

次に秘密鍵を配置をし、パーミッションを変更します。
秘密鍵はローカルホストのどの場所に配置しておいても問題ないのですが~/.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接続のコマンドを省略することができます。

$ vim ~/.ssh/config

#---------
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でできるようになります。