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