前の記事では、自分のパソコンを練習用のサーバーに見立てて、SSH の鍵でログインしました。今回は、VPS を借りたら最初にやることをチェックリストにまとめます。
もし、最初の VPS で root のまま作業を続け、パスワードでのログインも開けっぱなしにしていたら…。あとで設定を直そうとしたときに、順番を間違えて SSH の設定を変えてしまうと、自分がログインできなくなることがあります。そうなると、VPS の管理画面のコンソール(=VPS の会社の Web 画面から開ける、サーバーを直接操作できる画面)から入って直すことになり、思った以上に時間がかかります。
この記事では、最初の設定をどの順番で、なぜやるのかを中心に説明します。手を動かすのは、自分のパソコンで安全に試せる部分(ユーザー作成・設定の確認・ufw のルールの下書き)だけです。SSH の設定変更と ufw の有効化は、締め出しのおそれがあるので文章だけで説明します。
- VPS を借りたら最初にやることの全体の順番
- 作業用ユーザーを作って
sudoを使えるようにする方法 - 今の SSH の設定を、書きかえずに確かめる方法(
sshd -T) - ファイアウォール(ufw)の考え方と、ルールの下書きのしかた
- 締め出されないための「順番」と「戻り道」
-
sudo・aptを使える - ユーザーとグループ、パーミッションの意味がわかる
- SSH の鍵ログインを一度やってみた(
openssh-serverが入っているとスムーズ)
まだの方は、前の記事「LinuxのSSH入門|鍵を使ってサーバーへ安全にログインする【初心者向け】」から読むのがおすすめです。
- タイムゾーン:どの地域の時刻を使うかの設定(日本なら Asia/Tokyo)
- root:Linux の管理者ユーザー(ユーザー番号 0)。何でもできるので、ふだんの作業では使いません。いちばん上のディレクトリ「
/(ルート)」とは別のものです - sudo:許可されたユーザーが、コマンドの前につけて、そのコマンドだけを管理者(root)の権限で実行するしくみ。パスワードを聞かれたら、root ではなく自分のパスワードを入れます
- パーミッション:ファイルごとの権限の設定。「持ち主・グループ・その他の人」×「読む(r)・書く(w)・実行(x)」で決まり、
ls -lの-rw-r--r--のように表示されます
用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。
結論:最初の30分でやることチェックリスト
| 順番 | やること | この記事での扱い |
|---|---|---|
| 1 | アップデートとタイムゾーンの確認 | 確認だけ試す |
| 2 | 作業用ユーザーを作り、sudo を使えるようにする | 試す(最後に消す) |
| 3 | 作業用ユーザーに SSH 鍵を登録し、鍵でログインできるか確かめる | 前の記事で練習済み |
| 4 | root ログインとパスワードログインを止める | 文章だけ(今の設定の確認だけ試す) |
| 5 | ufw で SSH だけ通す | ルールの下書きまで試す。有効化は文章だけ |
| 6 | 自動アップデートとバックアップ | Lv4 のバックアップの記事で |
準備:練習用のディレクトリを作る
- 1
- 2
- 3
mkdir -p ~/linux-practice/vps-test
cd ~/linux-practice/vps-test
pwdここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。
(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice$ mkdir -p ~/linux-practice/vps-test
kaito@demo:~/linux-practice$ cd ~/linux-practice/vps-test
kaito@demo:~/linux-practice/vps-test$ pwd
/home/kaito/linux-practice/vps-testSTEP 1:アップデートとタイムゾーンを確かめる
VPS は、借りた時点のソフトが古いことがあります。まず、更新できるものがどれくらいあるかを見ます。
- 1
- 2
sudo apt update
apt list --upgradable(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
kaito@demo:~/linux-practice/vps-test$ sudo apt update
Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Fetched 231 kB in 0s (4839 kB/s)
All packages are up to date.
kaito@demo:~/linux-practice/vps-test$ apt list --upgradable検証環境では、更新できるパッケージ(=ソフトをインストールしやすいように、ひとまとめにしたもの)がなかったため、apt list --upgradable は何も表示しませんでした。
本物の VPS では、このあと sudo apt upgrade で更新します。次に、時刻とタイムゾーンを確かめます。cron(=決まった日時に、コマンドをくり返し自動で実行してくれるしくみ)や systemd timer で「毎朝7時」に動かすとき、ここがずれていると時間がずれます。
- 1
timedatectl(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
kaito@demo:~/linux-practice/vps-test$ timedatectl
Local time: Sun 2026-11-01 03:41:58 JST
Universal time: Sat 2026-10-31 18:41:58 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: noVPS は Etc/UTC(世界標準時)になっていることが多いです。日本時間にしたいときは sudo timedatectl set-timezone Asia/Tokyo で変えられます。
STEP 2:作業用ユーザーを作り、sudo を使えるようにする
root のまま作業すると、打ちまちがい1つでシステムを壊せてしまいます。ふだんは作業用ユーザーで入り、必要なときだけ sudo を使います。ここでは練習として deploy というユーザーを作ります。
- 1
sudo adduser deploy(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
kaito@demo:~/linux-practice/vps-test$ sudo adduser deploy
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Yパスワードは画面に表示されません。Debian 13 の adduser では、Adding user … のような説明の行は出ず、すぐに新しいパスワードを聞かれます。Full Name などの質問は、何も入力せずに Enter で進め、最後の確認に Y と答えました。
sudo グループに入れると、sudo が使えるようになります。
- 1
- 2
sudo usermod -aG sudo deploy
groups deploy(例)
- 1
- 2
- 3
kaito@demo:~/linux-practice/vps-test$ sudo usermod -aG sudo deploy
kaito@demo:~/linux-practice/vps-test$ groups deploy
deploy : deploy sudo userssudo が並んでいれば OK です。users は、Debian 13 で新しく作ったユーザーが入る、ふつうのグループです。
本当に sudo が使えるか、deploy になって確かめてみます。
- 1
- 2
- 3
- 4
su - deploy
whoami
sudo whoami
exit(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
kaito@demo:~/linux-practice/vps-test$ su - deploy
Password:
deploy@demo:~$ whoami
deploy
deploy@demo:~$ sudo whoami
[sudo] password for deploy:
root
deploy@demo:~$ exit
logoutsu - deploy のあとはプロンプトが deploy@demo:~$ に変わり、exit で kaito に戻りました。sudo で聞かれるのは、root ではなく deploy 自身のパスワードです。
本物の VPS では、このあと前の記事と同じ手順で、自分のパソコンから ssh-copy-id -i ~/.ssh/id_ed25519_server.pub [email protected] のように鍵を登録し、鍵で deploy にログインできることを確かめます。ここが次の STEP の大前提です。
STEP 3:今の SSH の設定を確かめる(書きかえない)
SSH サーバーの設定は /etc/ssh/sshd_config と、/etc/ssh/sshd_config.d/ の中のファイルに書かれています。sshd -T を使うと、それらをまとめた「今の実際の設定」を書きかえずに見られます。
sshd -T は、SSH サーバー(前の記事で入れた openssh-server)が動いている状態で使います。前の記事の後片づけで SSH サーバーを止めた場合は、先に sudo systemctl start ssh で起動してから、次のコマンドを打ってください。
- 1
- 2
sudo sshd -T | grep -Ei "^(permitrootlogin|passwordauthentication|pubkeyauthentication|port) "
ls /etc/ssh/sshd_config.d/検証環境では、前の記事で SSH サーバーを止めたまま実行したため、4行の値は表示されず、次のようになりました。
(例)
- 1
- 2
- 3
kaito@demo:~/linux-practice/vps-test$ sudo sshd -T | grep -Ei "^(permitrootlogin|passwordauthentication|pubkeyauthentication|port) "
Missing privilege separation directory: /run/sshd
kaito@demo:~/linux-practice/vps-test$ ls /etc/ssh/sshd_config.d//run/sshd は、SSH サーバーを起動したときに作られるフォルダです。SSH サーバーを止めると消えるため、sshd -T や sshd -t がこの表示で止まります。設定ファイルがこわれたわけではありません。sudo systemctl start ssh で SSH サーバーを起動してから、もう一度打ってください。SSH サーバーが動いている VPS では、この表示にはなりません。
SSH サーバーが動いている状態で確かめると、Debian 13 の初期設定では、4つの値は port 22・permitrootlogin without-password・pubkeyauthentication yes・passwordauthentication yes でした(設定を変えずに確かめた値です)。without-password は「root は鍵でならログインできる」という意味で、prohibit-password と同じ設定です。passwordauthentication yes は、パスワードでもログインできる状態です。
ls /etc/ssh/sshd_config.d/ は何も表示しませんでした。このフォルダには、まだ追加の設定ファイルがないということです。
| 設定 | 意味 | VPS でのおすすめ |
|---|---|---|
PermitRootLogin | root で直接ログインできるか | no |
PasswordAuthentication | パスワードでログインできるか | no(鍵だけにする) |
PubkeyAuthentication | 鍵でログインできるか | yes |
Port | SSH の部屋番号 | 22 のままでも、鍵だけにすれば十分安全 |
設定ファイルの書き方がまちがっていないかは、sudo sshd -t で確かめられます。何も表示されなければ、書き方は正しいという意味です。
- 1
- 2
sudo sshd -t
echo $?(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/vps-test$ sudo sshd -t
Missing privilege separation directory: /run/sshd
kaito@demo:~/linux-practice/vps-test$ echo $?
255SSH サーバーを止めたままなので、ここでも同じ表示になり、echo $? は 255(失敗)になりました。SSH サーバーを起動してから実行すると、書き方にまちがいがなければ何も表示されず、echo $? は 0 になります(先ほどの、設定を変えずに確かめたときも 0 でした)。
本物の VPS で root ログインとパスワードログインを止めるときは、次の順番を守ってください。順番をまちがえると、自分も締め出されます。
- 作業用ユーザーに鍵でログインできることを、先に確かめておく
-
sudo nano /etc/ssh/sshd_config.d/10-hardening.confのように新しいファイルを作り、PermitRootLogin noとPasswordAuthentication noの2行を書く -
sudo sshd -tで書き方を確かめる(何も表示されなければ OK) -
sudo systemctl reload sshで設定を読み直す - 今のターミナルは閉じずに、別のターミナルから新しく SSH でログインできるか確かめる
- 入れなかったら、閉じずに残しておいたターミナルで、作ったファイルを消して
reloadし直す
それでも入れなくなったときのために、VPS の管理画面にある「コンソール(Web からのログイン画面)」の場所を、先に確かめておきましょう。
10-hardening.conf にする理由 上の手順で sshd_config 本体ではなく、sshd_config.d/ の中に番号つきの新しいファイルを作るのには、理由があります。
- Debian の
sshd_configは、最初のほうでsshd_config.d/の中の.confファイルを読みこみます。中のファイルは、名前の順(00-→10-→50-…)に読まれます。 - SSH サーバーは、同じ設定が何度も出てきたとき、最初に読んだ値を使います(あとから書いた値で上書きされるのではありません)。
- VPS によっては、最初から
50-cloud-init.confのようなファイルがあり、その中にPasswordAuthentication yesと書かれていることがあります。
つまり、sshd_config 本体の下のほうに PasswordAuthentication no と書いても、先に読まれたファイルの yes が使われてしまうことがあるのです。10- のように、ほかのファイルより前に読まれる番号をつけておけば、自分の設定が先に使われます(50 より小さい番号なら、00- などでもかまいません)。
書きかえたあとは、STEP 3 と同じ sudo sshd -T | grep -Ei "^(permitrootlogin|passwordauthentication)" で、実際に使われる値が no になったかを確かめましょう。この記事の検証環境では ls /etc/ssh/sshd_config.d/ が空でしたが、VPS では、書きかえる前にこのフォルダの中身を見ておくと安心です。
STEP 4:ufw で「SSH だけ通す」ルールを下書きする
ファイアウォールは、建物の入り口にいる警備員のようなものです。どの部屋番号(ポート)への来客を通すかを決めます。Debian や Ubuntu では ufw(Uncomplicated Firewall)が使いやすいです。
- 1
- 2
sudo apt install ufw
sudo ufw status verbose(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
kaito@demo:~/linux-practice/vps-test$ sudo apt install ufw
Installing:
ufw
Installing dependencies:
iptables libip4tc2 libip6tc2 libnetfilter-conntrack3 libnfnetlink0
Suggested packages:
firewalld rsyslog
Summary:
Upgrading: 0, Installing: 6, Removing: 0, Not Upgrading: 0
Download size: 627 kB
Space needed: 3678 kB / 107 GB available
Continue? [Y/n] Y
…(途中省略)…
Setting up ufw (0.36.2-9) ...
Creating config file /etc/ufw/before.rules with new version
Creating config file /etc/ufw/before6.rules with new version
Creating config file /etc/ufw/after.rules with new version
Creating config file /etc/ufw/after6.rules with new version
Created symlink '/etc/systemd/system/multi-user.target.wants/ufw.service' → '/usr/lib/systemd/system/ufw.service'.
Processing triggers for libc-bin (2.41-12+deb13u4) ...
Processing triggers for man-db (2.13.1-1) ...
kaito@demo:~/linux-practice/vps-test$ sudo ufw status verbose
Status: inactive検証環境(Debian 13)には、ufw(=Debian・Ubuntu で使える、ファイアウォールをかんたんに設定するための道具)は最初は入っていませんでした(iptables など、全部で6個のパッケージが入りました)。sudo ufw status verbose は、Status: inactive の1行だけでした。
なお、ufw は sudo をつけて使います。Debian では、sudo なしで ufw status と打つと、-bash: ufw: コマンドが見つかりません(日本語の環境の場合)のように、コマンドそのものが見つからない表示になります。
これは、ufw が管理用のコマンドを置く /usr/sbin に入っていて、Debian のふつうのユーザーの PATH(コマンドを探す場所の一覧)には /usr/sbin が入っていないためです。PATH のしくみは、Lv3 の環境変数の記事で説明しています。sudo をつけると、管理用の場所も探してくれます(PATH の中身は、環境により異なります)。
Status: inactive は「警備員はまだ仕事をしていない」という意味です。この状態でルールを足しても、通信は何も変わりません。だから、ルールの下書きは安全に練習できます。
- 1
- 2
- 3
- 4
- 5
sudo ufw app list
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw show added(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
kaito@demo:~/linux-practice/vps-test$ sudo ufw app list
Available applications:
AIM
Bonjour
…(途中省略)…
OpenSSH
…(途中省略)…
svnserve
kaito@demo:~/linux-practice/vps-test$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
kaito@demo:~/linux-practice/vps-test$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
kaito@demo:~/linux-practice/vps-test$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
kaito@demo:~/linux-practice/vps-test$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSHufw app list には、ufw があらかじめ知っているアプリの名前が、アルファベット順にたくさん並びます(ここでは途中を省略しています)。その中に OpenSSH があることを確かめます。default の2つには、「ルールも合わせて見直してね」という意味の (be sure to update your rules accordingly) が出ます。Rules updated (v6) は、IPv6 用のルールも足したという意味です。
-
default deny incoming:外から来る通信は、基本は断る -
default allow outgoing:中から外への通信(aptやcurl)は通す -
allow OpenSSH:SSH(ポート 22)だけは通す
入れたばかりの ufw は、もともと「外からは断る・中からは通す」の設定になっています。ここでは、意味を確かめるためにあえて書いています。
最後に、もう一度 Status: inactive のままであることを確かめます。
- 1
sudo ufw status(例)
- 1
- 2
kaito@demo:~/linux-practice/vps-test$ sudo ufw status
Status: inactiveufw を有効にするコマンドは sudo ufw enable です。SSH を通すルール(allow OpenSSH)を入れ忘れたまま有効にすると、その瞬間に SSH が切れて、二度と入れなくなることがあります。SSH のポート番号を 22 から変えている場合は、その番号を通すルールが必要です。本物の VPS で有効にするときは、sudo ufw show added で SSH のルールがあることを確かめ、今のターミナルを閉じずに有効にして、別のターミナルからログインできるかを確かめてください。VPS 会社によっては、管理画面にも別のファイアウォールがあります。
つながらないからといって、sudo ufw allow 5678 のように、アプリのポートをインターネットにそのまま開けるのは危険です。n8n(=画面上で「ノード」というブロックをつないで、自動化の流れを作れるツール)などの管理画面は、まず SSH のトンネルや、自分のパソコンからだけ見られる形で使いましょう(VPS で n8n を動かす記事でくわしく説明します)。
🤖 詰まったらAIに聞こう:初期設定の順番を確かめたい
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Linuxの初心者です。VPSを借りたので、最初の設定をしようとしています。
締め出されないように、次の手順の順番と、各ステップのあとで確かめることを教えてください。
まちがえて入れなくなったときの戻し方も教えてください。
【VPSのOS】例:Ubuntu 24.04 / Debian 13
【いまの状態】例:rootでログインしている、作業用ユーザーはまだない
【やりたいこと】作業用ユーザー作成、鍵ログイン、パスワードログインの停止、ufwでSSHだけ通す
【sudo sshd -T | grep -Ei "^(permitrootlogin|passwordauthentication)" の結果】ここに貼る
【sudo ufw status verbose の結果】ここに貼るVPS の IP アドレス、root やユーザーのパスワード、管理画面のログイン情報、秘密鍵は貼らないでください。IP アドレスは「203.0.113.10」のようなダミーに置き換えましょう。設定ファイルを貼るときも、パスワードやトークン(=ログインした状態や、使ってよい範囲を表す文字列)が書かれていないか確かめてからにしてください。
後片づけ
ufw のルールの下書きを消し、練習用のユーザーを消します。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
sudo ufw delete allow OpenSSH
sudo ufw show added
sudo ufw status
sudo deluser --remove-home deploy
id deploy
cd ~/linux-practice
rm -r vps-test
ls
ls /home(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
kaito@demo:~/linux-practice/vps-test$ sudo ufw delete allow OpenSSH
Rules updated
Rules updated (v6)
kaito@demo:~/linux-practice/vps-test$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
(None)
kaito@demo:~/linux-practice/vps-test$ sudo ufw status
Status: inactive
kaito@demo:~/linux-practice/vps-test$ sudo deluser --remove-home deploy
kaito@demo:~/linux-practice/vps-test$ id deploy
id: ‘deploy’: no such user
kaito@demo:~/linux-practice/vps-test$ cd ~/linux-practice
kaito@demo:~/linux-practice$ rm -r vps-test
kaito@demo:~/linux-practice$ ls
archive-test chmod-test edit-test find-test grep-test link-test perm-test redirect-test
kaito@demo:~/linux-practice$ ls /home
kaitosudo deluser --remove-home deploy は、Debian 13 では何も表示せずに終わりました。id deploy が no such user になり、ls /home に deploy がなければ、ユーザーとホームディレクトリが消えています。
ufw そのものを消したいときは sudo apt remove ufw で消せます(有効にしていなければ、残しておいても通信には影響しません)。前の記事で入れた SSH サーバーを使わない場合は、sudo systemctl disable --now ssh で止めておきましょう。
よくある質問
Q. usermod -G sudo deploy と、-a をつけずに打ってしまいました。
-a(append=付け足す)がないと、deploy が入っていたほかのグループから外れて、sudo だけになってしまいます。groups deploy で確かめ、足りないグループがあれば sudo usermod -aG グループ名 deploy で入れ直してください。自分(kaito)に対してまちがえると、自分が sudo を使えなくなることもあるので、-aG はセットで覚えましょう。
Q. sudo を使おうとしたら「deploy is not in the sudoers file」と表示されました。
sudo グループに入っていないか、グループに入れる前からログインしていたことが原因です。グループの変更は、新しくログインしたときから使われます。groups deploy に sudo があるのに出る場合は、一度ログアウトして入り直してください(この記事の su - deploy は、そのたびに新しくログインするので、すぐ使えました)。
Q. VPS の管理画面にもファイアウォールがあります。ufw と両方いりますか?
VPS 会社の管理画面のファイアウォール(「パケットフィルター」「セキュリティグループ」などの名前のこともあります)は、サーバーの外で通信を止めます。ufw はサーバーの中で止めます。両方使うと守りが2重になりますが、どちらか一方で SSH を止めると入れなくなるので、両方で SSH(ポート 22)が通っているかを確かめましょう。
Q. ufw limit OpenSSH という書き方を見かけました。
limit は、同じ相手から短い時間に何度もつながろうとすると、しばらく断るルールです。パスワードを当てずっぽうで試す攻撃を減らせます。ただし、SSH の鍵だけでログインする設定にしていれば、allow でも多くの場合は十分です。ufw のくわしい動きは、man ufw で確かめられます。
まとめ
- VPS を借りたら「アップデート → 作業用ユーザー → 鍵ログイン確認 → SSH 強化 → ufw」の順番で進める
- 作業用ユーザーは
sudo adduserとsudo usermod -aG sudoで作る - 今の SSH の設定は
sudo sshd -T、書き方の確認はsudo sshd -t - SSH の設定変更と
ufw enableは、今のターミナルを閉じずに、別のターミナルで確かめる - ufw は
default deny incoming+allow OpenSSHが基本。アプリのポートを安易に開けない - 入れなくなったときの戻り道(VPS の管理画面のコンソール)を先に確かめておく
次の記事では、サーバーでプログラムを動かし続けるための systemd を学びます。systemctl でサービスを起動したり、パソコンを起動したときに自動で動かしたりする方法です。
次に読む記事
関連する記事
- 自動化スタック総覧|GAS・n8n・Python・Notionの使い分け:そもそも VPS が必要かどうかを考えたい方に
- n8nとは?最初のワークフローを1本つくる:VPS で動かしたい n8n を、先に触ってみたい方に
- Cursorにエラーを直してもらう5ステップ|エラーの渡し方・頼み方・直った後の確認まで:設定のエラーを、AI に上手に相談したい方に