日々の雑記

VPS の初期設定(OSインストール~SSH初期設定)

 2021年10月10日  2022年2月27日

目的

今回は、VPS 契約後の初期設定についてです。
インターネットに公開しているサーバに対して、公開鍵認証方式を使って自宅PC から 安全にSSH 接続できるところまで行います。

ご注意

本記述は CentOS 8 Stream を基にした記事ですので、OS が異なる方は注意を。また、記事の正しさについて細かい部分で誤りがある可能性があるため注意してください。

ご注意

本手順はサーバ側で鍵を作りクライアントに転送する手順となります。秘密鍵をクライアントへ転送するため、セキュリティ的に不安の方はクライアント側で鍵を生成して公開鍵を転送する方法で実施してください。また鍵の種類を [RSA 4096bit] としています。最近はより強固な鍵の種類(Ed25519など)が登場しているらしいです。

ゴール

今回は、OS インストール後の初期設定、自宅からVPS のサーバまで公開鍵認証方式を使って安全に1SSH 接続するところまで記述します。これをすることで、インターネットが繋がっていればどこでも安全に自分が管理するサーバへログオンすることができます。

手順

VPS のコントロールパネルを起動

インストール手順は通常のCentOS 8 Stream を検索していただくと記事がたくさんあるためここでは割愛します。
最小限のインストール 、時刻と日付の地域は日本(東京)として設定します。
また、ルートユーザのパスワードは 強固なもので 設定しましょう。

ユーザの作成

ユーザを作成します。

[root@<サーバ名>~]# useradd ken

ユーザパスワードを設定します。

[root@<サーバ名>~]# passwd ken
****************** (任意パスワード)
******************

このパスワードは、ユーザの(パスワード認証方式の)ログオンパスワードです。普段は利用しませんがパスワードなしでは気持ちが悪いので設定します。sshの公開鍵認証方式のパスワードではないです。
鍵認証用のパスワードは別途作成します。

SELINUX の停止

SELINUXとは、 Security-Enhanced-Linux のことで、Linux をよりセキュリティ的に堅牢にすることを目的としたカーネルの制御機能のことらしいです。デフォルトで有効になっていますが、これを有効にしたままでは、Webサイトがうまく動かないことが多く、無効化にしました。
有効にした上で必要な権限を設定、万が一のことに備えるのが理想なのですが、仕様が難解でなかなかうまく行かなかったため私のような個人運営するサイトでは無効化して問題ないと判断し無効化することにしました。

機会があれば勉強して有効化したいものです。

SELINUX を永続的に無効化する

無効化するには、設定ファイルを編集し、再起動します。設定ファイルの以下 enforcing となっている部分を disabled に変更します。

情報

vim の使い方については、他のサイトでたくさん良い記事があるので御覧ください。

[root@<サーバ名>~]# vim /etc/selinux/config
SELINUX=disabled #もともとは "enforcing" 
[root@<サーバ名>~]# reboot

※vim コマンドが入っていない方は、インストールしましょう。

[root@<サーバ名>~]# dnf install vim

再起動後、 SELINUX が無効化されたことを確認します。

[root@<サーバ名>~]# getenforce
disabled

となっていればOKです。

サーバのSSH の設定

もう少しです。次にssh 接続のための設定をします。

今度はサーバ(VPSのコンソールなど)に戻ります。まだ root ユーザでログインしているはずです。 su - <ユーザ名> で最初に作成したユーザで入り直しましょう。

[root@<サーバ名>~]# su - ken
Password: (パスワード入力 + Enter)
[ken@<サーバ名> root]$   ← ユーザ名が ken (作成したもの)となっていれば OK

ユーザのホームディレクトリに戻ります。

[ken@<サーバ名> root]$ cd ~
[ken@<サーバ名> ~]$ pwd
/home/ken

鍵ペアの作成

鍵ペアは、[RSA 4096bit] で作ります。

[ken@<サーバ名> root]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ken/.ssh/id_rsa):   # ← そのままEnter
Created directory '/home/ken/.ssh'.
Enter passphrase (empty for no passphrase):   # ←  パスフレーズ設定
Enter same passphrase again:  # ←  パスワード確認用
Your identification has been saved in /home/ken/.ssh/id_rsa.
Your public key has been saved in /home/ken/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:**************************** ken@<サーバ名>
The key's randomart image is:
+---[RSA 4096]----+
|+          ..    |
.........
......
...

鍵が作成されたかどうか確認します。 id_rsa.pubid_rsa があればOKです。

[ken@<サーバ名> ~]$ ls .ssh/ -alF
total **
.........
......
-rw-r--r--. 1 ken ken 400 Aug 21 2020  id_rsa.pub
-rw------- 1 ken ken 3434 Aug 21  2020 id_rsa
...

公開鍵情報を authorized_keys に登録しておきます。2

[ken@<サーバ名> ~]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

パーミッションを変更します。

[ken@<サーバ名> ~]$ chmod 600 authorized_keys

秘密鍵を取得

WinSCP などのソフトで、サーバのIPアドレスまたはホスト名を指定し、
/home/ken/.ssh にある id_rsa を取得しましょう。

任意のところに格納します。

取得が済んだら、秘密鍵漏洩防止のためサーバ側にある秘密鍵は削除します。

[ken@<サーバ名> ~]$  rm -f ~/.ssh/id_rsa

ssh の有効化

転送が終わったら、また root ユーザに戻り、以下の二箇所のsshのサービスの編集を行います。

[ken@world-of-f ~]$ su -
Password: ******** (root のパスワード)
Last login: ******
[root@world-of-f ~]# vim /etc/ssh/sshd_config
PermitRootLogin no # ← yes を no にします。(ルートユーザでログインされないようにする)
PublicAuthentication yes # ← no を yes ににします。(公開鍵認証方式を有効化する)

ここまで編集できたら、ssh のサービスを再起動します。

[root@world-of-f ~]# systemctl restart sshd

以上でサーバ側の設定は終了です。あとは接続確認方法です。

ssh 接続

クライアント側から ssh 接続してみます。Windows 10 の場合は、 OpenSSH が使えますので今回はその手順で記載します。
もちろん、ssh接続で利用できるソフトウェア(WinSCP, Putty, ... など)でも利用できます。

Windows 10 で OpenSSH をインストールする

Windows メニューから PowerShell を管理者で起動します。以下のコマンドを実行します。

PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

インストールできたら、以下を実行してバージョン番号が返答されればOKです。

PS C:\WINDOWS\system32> ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2

インストール完了したら、自分のユーザフォルダに .ssh ができているはずです。
そこに、サーバから取得した id_rsa ファイルを格納します。(通常は、 c:\users\<自分のユーザ名>.ssh\id_rsa に格納、となります。)

ssh_config を作成

windows でopen ssh 接続するときに、 ssh_config ファイルの設定情報をみて接続します。これを設定しておくと、
ssh world-of-f.website など、名前で接続することや、Visual Studio Code などで連携することができるなど後々メリットがあります。

Host world-of-f.website
    HostName world-of-f.website # IPアドレスでも可能
    User ken
    IdentityFile "C:\Users\ken\.ssh\id_rsa"

以上が終了したら、いよいよ ssh 接続してみましょう。

PS C:\Users\ken> ssh world-of-f.website
The authenticity of host '[world-of-f.website]:22 ([world-of-f.website]:22)' can't be established.
RSA key fingerprint is SHA256:*************************************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[world-of-f.website]:22' (RSA) to the list of known hosts.
Last login: *** *** ** ****** from ***.***.***.***
[kenichi@world-of-f ~]$ # ← 接続できた!!

  1. ssh 接続をする認証方式を パスワード認証方式 から 公開鍵認証方式 を使って認証する方式に切り替えます。公開鍵認証方式とは、鍵を持っている人(パソコン)からのみ、ログインを許可する。というものです。パスワード認証ではパスワードが(総当り攻撃などで)第三者に不正に破られるリスクがありますが、公開鍵認証方式では 鍵が盗まれない限り 破られることはありません。 

  2. 他の用途などで既にauthorized_keys を作っている場合は、リダイレクション 「>>」 によって情報を追記します。
    [ken@<サーバ名> ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 


コメント

この記事はコメントがありません。

記事にコメントする