リモートサーバーを利用するときには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
でファイル名を指定することもできます。例えば以下のようなコマンドを実行するとtest
とtest.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
でできるようになります。