Conoha VPS に Debian OS の初期設定してみた!【公開鍵認証でSSH接続】

WEBアプリケーションのデプロイの前に、VPS の設定を行うが、忘れてしまいそうなので、備忘録も兼ねて残しておく。この記事の目標は「SSH接続を公開鍵認証する」こととする。

はじめに

VPS のサーバーにSSH接続する方法として、「パスワード認証」「公開鍵認証」がある。パスワード認証は、簡単にアクセスできるが、簡単がゆえにセキュリティ強度が低くなるため、第三者にアクセスされる(俗に言う「乗っ取り」)可能性がある。よって、公開鍵認証方式を用いる設定をすることが一般的。

更新 (2018.04.13)

ConoHa VPSに"Debian9"ベースのサーバーを構築して、WEBアプリをリリースする記事を新たに追加した。
そちらでSSH接続の設定に関して、新たにまとめた。

参照先:こちら



環境

  • サーバー側: Debian 9.0 (64bit)
  • クライアント側:Mac OSX High Sierra 10.13.2

Step1. クライアント設定

ここの作業は、クライアント側での作業になる。

鍵ペア(秘密鍵・公開鍵)の生成

公開鍵認証に必要な秘密鍵 (id_rsa) と公開鍵 (id_rsa.pub) のペアを作成する。
鍵ペアはクライアント側で生成し、サーバーへ公開鍵を送信する方法が一般的。サーバー側もしくは別端末で生成することも可能だが、秘密鍵が漏洩する注意をする必要がおきる。
不要な心配をしないために、クライアント内で生成して動かさない!!がいい。

ターミナルを立ち上げて、以下のコマンドを実行する。

$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.

ファイル名を指定する場合、以下に入力して"Enter"する。ちなみに、"path"が指定されていない場合には、カレントディレクトリに指定ファイル名で保存される。尚、未入力の場合は、/Users/{user}/.ssh/フォルダに"id_rsa"ファイルとして保存される。

Enter file in which to save the key (/Users/{user}/.ssh/id_rsa):

続いて、以下が表示される。
これは、秘密鍵アクセスのためのパスワードに関するものである。アクセス時にパスワードを求める場合には、パスワードを2度入力する。

Enter passphrase (empty for no passphrase): 
Enter same passphrase again:

尚、今回使用するコマンドのオプションに関する説明を以下に記す。"-f"オプションは、保存場所指定になるので、参考までに載せる。

オプション 概要
-t 作成する鍵種類を指定。rsa指定は、SSHプロトコルバージョン2のRSA鍵が生成される。公開鍵暗号方式は、主にRSAが使用される
-b 作成する鍵サイズを指定。2048bit以上なら問題ない強度。より強度にするため、今回は4096bitを指定
-f 鍵ペアの保存先を指定。未指定の場合、デフォルトパス /Users/{user}/.ssh/id_rsa になる。今回は未指定

この結果、`/Users/{user}/.ssh/ディレクトリ内に、秘密鍵と公開鍵が生成される。

  • 秘密鍵:id_rsa
  • 公開鍵:id_rsa.pub

公開鍵のアップロード

公開鍵 (.pubファイル) をサーバーへアップロードする。
サーバー内に登録したら不要になるため、一時ディレクトリへの保存で問題ない。このディレクトリの中身は、サーバー再起動で全てクリアされる。

$ scp ~/.ssh/id_rsa.pub {user}@{サーバーIPアドレス}:/tmp


Step2. サーバー設定

この作業はサーバー側での作業になる。
Macのターミナル画面から、サーバーに"SSH"接続する。もしくは、ConoHa VPS サイトのWEB画面上のコンソールからサーバーにアクセスする。

公開鍵の登録

クライアントからアップロードした公開鍵を登録する。
具体的には、~/.ssh/authorized_keysファイルに公開鍵の内容を追記することになる。このファイルには、複数の公開鍵を登録することが可能で、この結果、複数アクセスが可能となる。

# `~/.ssh` フォルダが存在しない場合、作成
$ mkdir ~/.ssh

# `~/.ssh/authorized_keys` に公開鍵の内容を追記
$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

# 所有者(今ログインしているユーザー)以外のアクセスを許可しない
$ chmod 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

# 登録済の公開鍵は削除 (*サーバー再起動でクリアされるが、念のため…)
$ rm /tmp/id_rsa.pub

SSHの設定(パスワード認証の無効化)

SSH の設定ファイルを編集して、下記設定を変更する。この結果、セキュリティ強度が高まる。

項目 変更前 変更後
rootユーザのログイン無効化 PermitRootLogin yes PermitRootLogin no
パスワード認証の無効化 PasswordAutentication yes PermitAuthentication no
パスワードなしの接続無効化 PermitEmptyPasswords yes PermitEmptyPasswords no

変更前(初期状態)は、先頭に"#"が付与されて設定自体が向こうになっている場合がある。この場合は、"#"を外してほしい。

ちなみに…この変更の実施+SSHサービスの再起動の後では、下記方法でのMacのターミナルからSSH接続できなくなる。もし接続できる場合には、設定変更が完了していないことが考えられるので、内容を確認してほしい。スペルミスなども要注意。

SSHサービスの再起動

下記コマンドを実行して、SSHサービス (sshd) を再起動する。この結果、sshの設定変更が反映される。

$ sudo /etc/init.d/ssh restart

今回のサーバーOSは、Debianになるため上記になる。CentOSでは$ sudo systemctl start sshd.service になる。

Step3. SSH接続方法

接続

Macのターミナルアプリから以下を実行して、公開鍵を用いてSSH接続を確立する。

$ ssh -i ~/.ssh/id_rsa {User}@{サーバーIPアドレス}

"-i"オプションで秘密鍵をパスから指定する。これによって、サーバー側に登録した公開鍵とペアになって接続が確立される。もし秘密鍵の参照にパスワードを設定した場合には、下記のようなパスの入力を求められるので、入力して"Enter"を押下する。

Enter passphrase for key '/c/Users/{User}/.ssh/id_rsa':

切断

以下のコマンドを入力して、ssh通信を切断する

$ exit