買いたての VPS は、まるで鍵のかかっていないドアみたいなもの。世界中のスクリプトキディたちがノックしまくってます。この記事じゃ、そのドアにしっかり鍵をかける方法を案内するよ。君の「ザリガニ」が外に脱走してウロチョロしないようにね。

0、はじめに

VPS を買って、ワクワクしながら IP と root パスワードを受け取った。で、次はどうする?

多くの人がやりがちなのは:すぐにソフトを入れ始めて、プロジェクトをデプロイしちゃうこと。

これは危険な習慣だよ。

君の VPS にはパブリック IP が付いてる。つまり、世界中の誰でも接続を試みることができるってこと。しかもデフォルト設定のままだと:

  • ポートは誰でも見える 22 番が開放っきり
  • ユーザー名は誰もが知ってる root
  • 君を守っているのはパスワードたった一つ

毎日、無数の自動化スクリプトが IP 範囲をスキャンして、よくあるパスワードでブルートフォース攻撃を仕掛けてる。君のサーバーは、オンラインになったその瞬間から、すでに攻撃されてるんだ。

だから、VPS を手に入れてから最初にやるべきことは、ソフトを入れることじゃなく、セキュリティの初期設定なんだよ


1、目指すゴール

この記事の目標は:

  • セキュアなリモートアクセスを確立:SSH鍵ログイン+デフォルト以外のポートに変更
  • 一般ユーザーを作成:rootの直接使用を避ける
  • ファイアウォールを設定:必要なポートだけ開放
  • ネットワーク加速を有効化:BBRでネットワークを爆速化
  • ブルートフォース攻撃を防止:fail2banで悪意あるIPを自動でブロック

ここまで済ませれば、VPSの基盤はバッチリ。あとは安心していろんなサービスをデプロイできるよ。


2、計画と思考

なぜこの設定をするの?

買いたてのVPSは、引き渡されたばかりのスケルトンの部屋みたいなもの。

デフォルト状態 リスク 僕たちの解決策
rootユーザーで直接ログイン 権限が強すぎて誤操作のリスクが高い 一般ユーザー作成 + sudo
パスワードログイン ブルートフォース攻撃の標的に SSH鍵ログイン
デフォルトの22番ポート スキャナーに真っ先に狙われる 非標準ポートに変更
ファイアウォール無効 全ポートが外部に公開される UFWで必要なポートだけ許可
ネイティブネットワーク パケロス率高、レイテンシ大 BBR輻輳制御アルゴリズム

全体の流れ

VPS初始化流程

この順番で作業を進めていこう。各ステップで「なぜこれをするのか」も解説していくよ。

3、作業手順

3.1 初回ログインとシステム更新

サーバーIPを確認

VPSを契約すると、プロバイダーから次の情報が届くよ:

  • IP アドレス:たとえば 192.168.1.100
  • ポート:通常は 22(プロバイダによっては別のポートに変更されていることもあります)
  • ユーザー名:通常は root
  • パスワード:ランダムに生成された文字列

VPS 服务商后台的登录信息页面

SSH 接続

Mac / Linux ユーザー:ターミナルを開いて、そのまま以下を入力:

1
2
ssh root@你的服务器IP
# 例如:ssh [email protected]

Windows ユーザー

  • Windows 10/11 には OpenSSH が標準で入っているので、PowerShell や CMD でそのまま上記のコマンドが使えます
  • あるいは TermiusMobaXterm などのツールを使うのもアリです

初めて接続すると、フィンガープリントの確認プロンプトが出ます:

1
2
3
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これは「このマシンは知らないけど、本当に接続していい?」と聞いてきてるんです。

yes と入力して Enter。続いてパスワードを入力します(入力中は何も表示されませんが、これは正常なセキュリティ仕様です)、Enter を押します。

首次 SSH 连接的完整过程,包含指纹确认

こんな感じの表示が出たら、ログイン成功です:

1
2
3
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)
...
root@hostname:~#

💡 なぜフィンガープリントを確認するの?

これは「中間者攻撃(Man-in-the-Middle Attack)」を防ぐためです。初回接続時にサーバーのフィンガープリントを記録しておき、以降の接続でフィンガープリントが変わっていたら、誰かがあなたのサーバーを装っている可能性があります。

登录成功了

まずはサーバーの様子を知ろう

ログインできたら、まずはこのマシンの基本情報をチェックしておきましょう:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看系统版本
cat /etc/os-release

# 查看内核版本
uname -r

# 查看 CPU 核心数和型号
nproc
lscpu | grep "Model name"

# 查看内存
free -h

# 查看磁盘
df -h

服务器基本信息输出

この情報は後でトラブルシューティングするときに役立つので、頭の片隅に置いておいてくださいね。

システムをアップデートする

サーバーの情報を確認したら、最初にやるべきことはシステムのアップデートです。新しいサーバーのOSイメージは数ヶ月前のものかもしれないし、その間にセキュリティパッチがリリースされている可能性がありますからね:

1
2
# 更新软件包列表 + 升级所有软件 + 清理
apt update && apt full-upgrade -y && apt autoremove -y && apt autoclean

パラメーターの解説:

  • apt update:パッケージインデックスを更新
  • apt full-upgrade:カーネルを含むすべてのソフトをアップグレード
  • -y:自動で「yes」と答えるので、手動で入力する必要なし
  • apt autoremove:不要になった依存パッケージを削除
  • apt autoclean:ダウンロードしたパッケージのキャッシュをクリーンアップ

apt update 和 apt upgrade 执行过程

⏱️ このステップは更新量によっては数分かかることがあります。途中で確認を求められることもありますが、基本的には画面の指示に従えば大丈夫ですよ。

再起動が必要か確認する

カーネルのアップデート後は、反映のために再起動が必要になることがよくあります:

1
2
# 检查是否需要重启
cat /var/run/reboot-required 2>/dev/null && echo ">>> 需要重启" || echo ">>> 无需重启"

是否需要重启

もし再起動が必要と表示されたら:

1
reboot

再起動後は、再度 SSH 接続し直す必要があります。

よく使うツールをインストールする

1
apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch

これらのツールは何に使うもの?:

ツール 用途
sudo 一般ユーザーに管理者コマンドを実行させる
curl / wget ファイルをダウンロード
git バージョン管理
vim テキストエディタ
htop 見やすいプロセスモニター
tree ディレクトリ構造をツリー表示
net-tools ネットワークユーティリティ(ifconfig、netstat など)
ufw シンプルで使いやすいファイアウォール
fail2ban ブルートフォース攻撃対策
neofetch システム情報をオシャレに表示
neofetch 显示的系统信息

3.2 root以外のユーザーを作成する

なぜ root で直接作業しないのか?

root ユーザーは権限が強すぎるので、ちょっと手が滑って rm -rf / と打っただけで全部吹き飛びます。普段の作業は一般ユーザーで行い、管理者権限が必要なときだけ sudo を使うのが基本ですよ。

龙虾(openclaw)はモンスターみたいなものだし、root を渡すなんて恐れ多いですよね?

ユーザーを作成する

1
2
# 创建用户(把 ittinker 换成你想要的用户名)
adduser ittinker

パスワードや各種情報の入力を求められるので、画面の指示に従って設定します:

1
2
3
4
5
6
7
8
New password:              # 输入密码(不会显示)
Retype new password: # 再输入一次
Full Name []: # 可以直接回车跳过
Room Number []: # 回车跳过
Work Phone []: # 回车跳过
Home Phone []: # 回车跳过
Other []: # 回车跳过
Is the information correct? [Y/n] # 输入 Y 确认

adduser 创建用户的完整交互过程

sudo 権限を付与する

1
2
# 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户
usermod -aG sudo ittinker

確認してみよう:

1
2
3
4
5
# 切换到新用户 ittinker 换成你自己上面创建的那个用户
su - ittinker

# 测试 sudo 是否生效
sudo whoami

出力が root になっていれば、sudo の設定はバッチリ成功です。
测试sudo

💡 ちょっとしたコツ

exit と入力すれば root ユーザーに戻れます。この後の設定作業は引き続き root で進めて、すべて終わったら一般ユーザーに切り替えましょう。


3.3 SSH 鍵認証を設定する

鍵認証 vs パスワード認証

SSH密钥认证原理

鍵認証はパスワード認証よりずっと安全です:

  • パスワードは総当たり攻撃で破られるリスクがありますが、鍵ならほぼ不可能です
  • 毎回パスワードを入力しなくていいので、圧倒的にラクです
  • 仮にパスワードが漏洩しても、秘密鍵がなければログインできません

ステップ1:ローカルで鍵ペアを生成する

自分のPC(サーバーじゃないよ)で実行しよう:

1
2
# 生成 ED25519 密钥(推荐,更安全更快)
ssh-keygen -t ed25519 -C "[email protected]"

こんな感じで聞かれる:

1
Enter file in which to save the key (/Users/你/.ssh/id_ed25519):

そのまま Enter を押してデフォルトのパスで OK。ここでは ./ittinker を使ってるけど、要するに現在のディレクトリに ittinker って名前で保存するってこと。

1
Enter passphrase (empty for no passphrase):

パスフレーズを設定してワンポイント保護を追加してもいいし、そのまま Enter で空欄のままでも大丈夫。

本地生成 SSH 密钥的过程

生成が完了したら、~/.ssh/ ディレクトリに2つのファイルができてるはず(以下はデフォルトのファイル名。先ほど Enter を押した場合はこうなるよ):

  • id_ed25519秘密鍵。絶対に漏らしちゃダメ!
  • id_ed25519.pub公開鍵。これはサーバーにアップロードする

💡 ed25519 vs RSA

ed25519 は現時点で推奨されるアルゴリズム。従来の RSA より安全で、鍵も短い。もしお使いのシステムが古くて対応していない場合は、ssh-keygen -t rsa -b 4096 を使えば OK。

細かい話だけど、ed25519 で生成した鍵は結構小さい。一方 RSA はファイルがでかい。AI に聞いてみたら、サイズは関係なくてアルゴリズムの違いらしい。

ステップ2:公開鍵をサーバーにアップロードする

方法 A:ssh-copy-id を使う(おすすめ)

1
2
# 在你的电脑上执行
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP

パスワードを入力すれば、公開鍵が自動でサーバーにコピーされるよ。

ssh-copy-id 执行成功

方法 B:手動でコピーする

もし ssh-copy-id が使えない場合は、手動でやりましょう:

1
2
# 1. 在你的电脑上,查看公钥内容
cat ~/.ssh/id_ed25519.pub

出力された内容(ssh-ed25519 から始まる長い文字列)をコピーします。

1
2
3
4
5
6
7
8
9
10
11
# 2. 在服务器上,为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名
mkdir -p /home/ittinker/.ssh
chmod 700 /home/ittinker/.ssh

# 3. 创建 authorized_keys 文件并粘贴公钥
vim /home/ittinker/.ssh/authorized_keys
# 按 i 进入编辑模式,粘贴公钥,按 Esc,输入 :wq 保存退出

# 4. 设置正确的权限
chmod 600 /home/ittinker/.ssh/authorized_keys
chown -R ittinker:ittinker /home/ittinker/.ssh

⚠️ 権限は超重要!

SSH はファイルの権限に厳格です:

  • .ssh ディレクトリ:700(ユーザー本人のみアクセス可能)
  • authorized_keys ファイル:600(ユーザー本人のみ読み書き可能)

権限が間違っていると、SSH は鍵を使ったログインを拒否します。

ステップ3:鍵ログインをテストする

新しいターミナルウィンドウを開き(元のウィンドウは念のため閉じずに残しておきましょう。設定を間違えた時の保険になります)、鍵ログインをテストしてみましょう:

1
ssh ittinker@你的服务器IP

パスワードを入力せずにログインできたら、鍵の設定は成功です!🎉

(秘密鍵にパスフレーズを設定している場合は、秘密鍵のパスワード入力を求められますが、これは正常な動作です)
使用密钥成功登录(无需服务器密码)

ここで -i パラメータを追加しているのは、今回の鍵がデフォルトのパスではなく現在のパスに置かれているためです。指定しないと、システムはデフォルトの鍵を使おうとします。


3.4 SSHのセキュリティ強化

鍵ログインが使えるようになったので、次は SSH をさらに堅牢にしていきましょう:

  1. デフォルトポートの変更(スキャン対策)
  2. パスワードログインの無効化
  3. root の直接ログイン禁止

SSH設定ファイルを編集する

1
2
3
4
5
# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑配置
nano /etc/ssh/sshd_config

修改前

以下の設定を見つけて変更しよう(コメントアウトされている場合は、先頭の # を削除してね):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 修改端口(选一个 1024-65535 之间的数字)
Port 22000

# 禁止 root 登录
PermitRootLogin no

# 允许密钥登录
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 禁止密码登录(确保密钥登录测试成功后再改!)
PasswordAuthentication no

# 使用更安全的 SSH2 协议
Protocol 2

# 最大认证尝试次数
MaxAuthTries 3

# 客户端超时设置
ClientAliveInterval 300
ClientAliveCountMax 2

修改后的 sshd_config 关键配置

保存して終了しよう(ctrl + o)。

Nanoでの保存は ctrl + o。ファイル名を聞かれたらそのまま Enter を押せばOK。終了は ctrl + x だよ。

SSHサービスを再起動する

1
systemctl restart sshd.service

⚠️ 重要な注意点!

今開いているターミナルは閉じないで! まずは新しいウィンドウを開いて、新しい設定でログインできるかテストしてみよう:

1
ssh -p 22000 yourname@你的服务器IP

ログインできたら、古いウィンドウを閉じてOK。もしうまくログインできなくても、古いウィンドウで設定を修正できるから安心してね。

もし軽量サーバーを借りているなら、このポートは変更できない可能性が高いよ。従来のECSなら変更できるから、その辺は要注意ね。


3.5 UFWファイアウォールの設定

UFW防火墙规则

UFW(Uncomplicated Firewall)はUbuntuのデフォルトファイアウォールツール。シンプルだけど強力なんだ。

基本設定

1
2
3
4
5
6
7
8
9
10
11
# 设置默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 允许 SSH(使用你设置的端口)
ufw allow 22000/tcp comment 'SSH'
ufw allow 22/tcp comment 'SSH' # 如果是轻量服务器,还是开22端口

# 允许 HTTP 和 HTTPS
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

ファイアウォールを有効にする

1
ufw enable

こんなプロンプトが出るよ:

1
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

y と入力して確認しよう。

ステータスの確認

1
ufw status verbose

ufw status 的输出结果

23022は私の打ち間違いです。各自の環境に合わせて適宜読み替えてくださいね。

出力はこんな感じ:

1
2
3
4
5
6
7
8
9
10
11
12
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)

To Action From
-- ------ ----
22000/tcp (SSH) ALLOW IN Anywhere
80/tcp (HTTP) ALLOW IN Anywhere
443/tcp (HTTPS) ALLOW IN Anywhere
22000/tcp (SSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (HTTP (v6)) ALLOW IN Anywhere (v6)
443/tcp (HTTPS (v6)) ALLOW IN Anywhere (v6)

よく使うコマンドチートシート

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看状态
ufw status

# 添加规则
ufw allow 8080/tcp

# 删除规则
ufw delete allow 8080/tcp

# 允许特定 IP 访问所有端口
ufw allow from 192.168.1.100

# 禁用防火墙(不推荐)
ufw disable

# 重置所有规则
ufw reset

3.6 BBRアクセラレーションを有効にする

BBR(Bottleneck Bandwidth and Round-trip propagation time)は、Googleが開発したTCP輻輳制御アルゴリズムで、ネットワークパフォーマンスを大幅に向上させることができます。

ワンクリックで有効化

1
2
3
4
5
6
# 添加 BBR 配置
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 使配置生效
sysctl -p

有効になったか確認する

1
2
# 查看当前拥塞控制算法
sysctl net.ipv4.tcp_congestion_control

出力はこうなればOK:

1
net.ipv4.tcp_congestion_control = bbr
1
2
# 确认 BBR 模块已加载
lsmod | grep bbr

出力はこんな感じ:

1
tcp_bbr    20480  3

💡 BBRの効果

BBRを有効にすると、特にネットワークが不安定だったりレイテンシが高い環境下で、こんな違いをはっきり実感できるはず:

  • ダウンロード速度が速くなる
  • SSH操作がもっさりしなくなる
  • Webページの読み込みが速くなる

bbr 开启


3.7 fail2banでブルートフォース攻撃を防ぐ設定

fail2banはログを監視し、何度もログインに失敗したIPを見つけると自動でアクセスをブロックしてくれます。

基本設定

1
2
3
4
5
# 复制默认配置(不要直接修改 jail.conf)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 编辑配置
vim /etc/fail2ban/jail.local

[sshd] の部分を見つけて、以下の設定になっているか確認してください:

1
2
3
4
5
6
7
8
[sshd]
enabled = true
port = 22000 # 改成你的 SSH 端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 # 最大尝试次数
bantime = 3600 # 封禁时间(秒),这里是 1 小时
findtime = 600 # 在这个时间窗口内

fail2ban

サービスを起動

1
2
3
4
5
# 重启 fail2ban
systemctl restart fail2ban

# 设置开机自启
systemctl enable fail2ban

状態を確認

1
2
3
4
5
# 查看 fail2ban 状态
fail2ban-client status

# 查看 SSH 监控状态
fail2ban-client status sshd

fail2ban-client status sshd 的输出

出力はこんな感じになります:

1
2
3
4
5
6
7
8
9
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

よく使うコマンド

1
2
3
4
5
6
7
8
# 手动封禁 IP
fail2ban-client set sshd banip 1.2.3.4

# 手动解封 IP
fail2ban-client set sshd unbanip 1.2.3.4

# 查看被封禁的 IP
fail2ban-client status sshd

3.8 [オプション] SSH Config で複数サーバーを管理

サーバーが複数あると、毎回 ssh -p 22000 user@ip を打つのが面倒ですよね。そんなときは SSH Config を使ってスッキリさせましょう。

設定ファイル

自分のローカルPC~/.ssh/config を編集します:

1
vim ~/.ssh/config

設定を追加します:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 第一台服务器
Host vps1
HostName 192.168.1.100
User yourname
Port 22000
IdentityFile ~/.ssh/id_ed25519

# 第二台服务器
Host vps2
HostName 192.168.1.101
User admin
Port 22222
IdentityFile ~/.ssh/id_ed25519

# 通用设置(应用于所有连接)
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes

使い方

これでエイリアスを使って直接接続できます:

1
2
3
4
5
# 连接第一台服务器
ssh vps1

# 连接第二台服务器
ssh vps2

IP、ポート、ユーザー名を覚えておく手間がなくなりますよ!


3.9 [オプション] Cloudflare からのアクセスのみ許可

もしサイトが完全に Cloudflare の背後で動いているなら、80/443 ポートへのアクセスを Cloudflare の IP だけに限定して、セキュリティを強化できます。

⚠️ 注意:この設定を行うには、ドメインがすでに Cloudflare CDN に接続されている必要があります。

自動設定スクリプト

1
2
3
4
5
6
7
8
# 下载脚本
wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh

# 添加执行权限
chmod +x ~/.cloudflare-ufw.sh

# 执行脚本
~/.cloudflare-ufw.sh

このスクリプトがやること:

  1. Cloudflare の公式から最新の IP レンジを取得する
  2. UFW のルールを追加して、これらの IP だけに 80/443 ポートへのアクセスを許可する
  3. UFW をリロードする

自動更新をスケジュールする

Cloudflare の IP レンジは変わる可能性があるので、毎週自動で更新されるように設定しておこう:

1
2
# 添加 cron 任务(每周一凌晨执行)
(crontab -l 2>/dev/null; echo "0 0 * * 1 /root/.cloudflare-ufw.sh > /dev/null 2>&1") | crontab -

3.10 タイムゾーンの設定

デフォルトのタイムゾーンは UTC になっているはず。ログを見るときのために、自分のタイムゾーンに変更しておこう:

1
2
3
4
5
6
7
8
# 查看当前时区
timedatectl

# 设置为上海时区(中国用户)
sudo timedatectl set-timezone Asia/Shanghai

# 验证
date

设置时区


3.11 [オプション] 自動セキュリティアップデートの設定

システムにセキュリティパッチを自動でインストールさせておけば、いちいち手動で作業する手間が省ける:

1
2
3
4
5
# 安装自动更新工具
sudo apt install -y unattended-upgrades

# 配置
sudo dpkg-reconfigure --priority=low unattended-upgrades

「Yes」を選んで自動更新を有効にしよう。

💡 この機能はセキュリティアップデートだけを自動でインストールしてくれる。新しいメジャーバージョンへのアップグレードは行わないから、比較的安全だ。


4. まとめ

初期化チェックリスト

以上の設定が終わったら、このリストで最終チェックしてみよう:

チェック項目 コマンド 期待される結果
システムは最新か apt update && apt list --upgradable アップグレード可能なパッケージなし
一般ユーザーで sudo 可能か sudo whoami root と出力される
鍵認証ログインは正常か ssh yourname@ip -p port パスワードなしでログインできる
パスワードログインは無効化されているか grep PasswordAuth /etc/ssh/sshd_config PasswordAuthentication no
SSHポートは変更済みか grep Port /etc/ssh/sshd_config 自分で設定したポート
ファイアウォールは有効か ufw status Status: active
BBRは有効か sysctl net.ipv4.tcp_congestion_control = bbr
fail2banは稼働中か systemctl status fail2ban active (running)
タイムゾーンは設定済みか timedatectl Asia/Shanghai または自分のタイムゾーン
ローカルの SSH Config cat ~/.ssh/config サーバーのエイリアスが設定済み

主要ファイルの場所

1
2
3
4
/etc/ssh/sshd_config        # SSH 服务端配置
~/.ssh/authorized_keys # 允许登录的公钥
~/.ssh/config # 本地 SSH 客户端配置(在你电脑上)
/etc/fail2ban/jail.local # fail2ban 配置

セキュリティのベストプラクティス

  1. システムを定期的にアップデートするapt update && apt upgrade
  2. ログインログを定期的にチェックするlastb(ログイン失敗)、last(ログイン成功)
  3. fail2banのブロック状況をこまめに確認する
  4. 重要な設定ファイルは変更前に必ずバックアップを取る

5、トラブルシューティング

Q1:鍵認証ログインに失敗し、パスワードを求められる?

考えられる原因:

  1. パーミッションの問題(一番よくあるやつ)

    1
    2
    3
    # 检查并修复权限
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  2. 公開鍵のコピーがうまくいっていない

    1
    2
    3
    # 检查 authorized_keys 内容
    cat ~/.ssh/authorized_keys
    # 应该是一行完整的公钥,以 ssh-ed25519 或 ssh-rsa 开头
  3. SELinuxの干渉(CentOS/RHEL系の場合)

    1
    restorecon -Rv ~/.ssh

Q2:ポートを変えたら繋がらなくなった?

トラブルシューティング手順:

  1. 新しいポートがファイアウォールで開放されているか確認:

    1
    ufw status | grep 你的端口
  2. SSHの設定が正しいか確認:

    1
    grep Port /etc/ssh/sshd_config
  3. SSHサービスがちゃんと動いているか確認:

    1
    systemctl status sshd
  4. それでも全く繋がらない場合は、クラウド業者のVNC/コンソールからログインして修復しよう。

Q2.5:ポート変更が全然反映されない?(クラウド業者の軽量サーバーの場合)

現象/etc/ssh/sshd_configを変更してサービスを再起動しても、22番ポートが生き残ったままで、新しいポートが反映されていない。

診断方法

bash

1
2
# 查看是谁在监听 22 端口
netstat -lntp | grep :22

もし出力がこんな感じだったら:

1
tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init

これは、22番ポートをリッスンしているのが init(PID 1)であって、sshd プロセスではないってことだよ。

原因:一部のクラウド事業者が提供する「軽量アプリケーションサーバー」や「コンテナインスタンス」では、SSH がプラットフォームレイヤーでプロキシされているため、サーバー内部の sshd 設定が反映されません。

解決策

インスタンスタイプ SSH ポートの変更方法
従来の ECS sshd_config を変更 ✅
軽量サーバー クラウドのコンソールから変更する必要があるか、そもそも対応していない
コンテナインスタンス 基本的に変更不可

お使いのインスタンスでポート変更に対応していない場合は、他のセキュリティ対策がより重要になります:

  • ✅ 一般ユーザーの作成 + root ログインの無効化
  • ✅ SSH 鍵認証の利用 + パスワードログインの無効化
  • ✅ fail2ban によるブルートフォース攻撃対策

これらをしっかりやっておけば、セキュリティレベルは依然として高く保てますよ。

Q3:fail2ban で自分をブロックしちゃった?

1
2
3
4
5
# 用 VNC 登录后解封
fail2ban-client set sshd unbanip 你的IP

# 把你的 IP 加入白名单,编辑 jail.local
ignoreip = 127.0.0.1/8 ::1 你的IP

Q4:UFW を有効化したらサイトにアクセスできなくなった?

1
2
3
4
5
6
# 检查 80/443 是否开放
ufw status

# 如果没有,添加规则
ufw allow 80/tcp
ufw allow 443/tcp

Q5:コマンドを実行すると sudo が見つからないって出る?

Debian の最小構成インストールだと sudo が入っていないことがあるので、root でインストールしましょう:

1
2
apt install sudo
usermod -aG sudo ittinker

6、ワンクリック初期化スクリプト(慣れてきたら使おう)

上記の手順にすっかり慣れたら、このスクリプトでサクッと初期化できます。

⚠️ 注意:スクリプトを実行する前に、SSH 公開鍵の準備ができているか確認しておこうね。

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash
# VPS 初始化脚本
# 使用方法:以 root 身份运行

set -e

# === 配置区域(根据你的需求修改)===
NEW_USER="ittinker" # 新用户名
NEW_SSH_PORT="22000" # 新 SSH 端口
TIMEZONE="Asia/Shanghai" # 时区
# =====================================

echo "=== VPS 初始化脚本 ==="
echo ""

# 1. 更新系统
echo "[1/8] 更新系统..."
apt update && apt upgrade -y

# 2. 安装基础工具
echo "[2/8] 安装基础工具..."
apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch

# 3. 创建新用户
echo "[3/8] 创建用户 $NEW_USER..."
if id "$NEW_USER" &>/dev/null; then
echo "用户已存在,跳过创建"
else
adduser --gecos "" $NEW_USER
usermod -aG sudo $NEW_USER
fi

# 4. 配置 SSH 目录
echo "[4/8] 配置 SSH 目录..."
mkdir -p /home/$NEW_USER/.ssh
chmod 700 /home/$NEW_USER/.ssh
touch /home/$NEW_USER/.ssh/authorized_keys
chmod 600 /home/$NEW_USER/.ssh/authorized_keys
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER/.ssh

echo ""
echo ">>> 请将你的公钥粘贴到下面(粘贴后按 Ctrl+D 结束):"
cat >> /home/$NEW_USER/.ssh/authorized_keys
echo ""

# 5. 修改 SSH 配置
echo "[5/8] 修改 SSH 配置..."
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i "s/^#*Port .*/Port $NEW_SSH_PORT/" /etc/ssh/sshd_config
sed -i "s/^#*PermitRootLogin .*/PermitRootLogin no/" /etc/ssh/sshd_config
sed -i "s/^#*PasswordAuthentication .*/PasswordAuthentication no/" /etc/ssh/sshd_config
sed -i "s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/" /etc/ssh/sshd_config

# 6. 配置防火墙
echo "[6/8] 配置防火墙..."
ufw default deny incoming
ufw default allow outgoing
ufw allow $NEW_SSH_PORT/tcp
ufw allow 80/tcp
ufw allow 443/tcp
echo "y" | ufw enable

# 7. 开启 BBR
echo "[7/8] 开启 BBR..."
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

# 8. 设置时区
echo "[8/8] 设置时区..."
timedatectl set-timezone $TIMEZONE

# 重启 SSH
systemctl restart sshd

echo ""
echo "=========================================="
echo " ✅ 初始化完成!"
echo "=========================================="
echo ""
echo " 新 SSH 端口: $NEW_SSH_PORT"
echo " 新用户: $NEW_USER"
echo " 时区: $TIMEZONE"
echo ""
echo " 请使用以下命令登录:"
echo " ssh -p $NEW_SSH_PORT $NEW_USER@$(curl -s ifconfig.me 2>/dev/null || echo '你的IP')"
echo ""
echo " ⚠️ 重要:请先测试新配置能否登录,再关闭当前终端!"
echo ""

7、ここまでやると、セキュリティはどれくらい上がった?

手順 やったこと なぜ重要か
システム更新 最新パッチをインストール 既知の脆弱性を修正
新規ユーザー作成 root を直接使わないように 誤操作リスクを減らす
SSH 鍵 パスワードの代わりに鍵を使う 総当たり攻撃で破られない
ポート変更 デフォルトの 22 を避ける スキャンで見つかる確率を下げる
パスワード無効化 鍵ログインのみ許可 パスワード攻撃を完全に防ぐ
root 無効化 root で直接ログイン不可 攻撃の難易度を上げる
UFW ファイアウォール 必要なポートだけ開放 攻撃対象領域を減らす
BBR 加速 ネットワーク性能を最適化 アクセス速度を向上
fail2ban 悪意ある IP を自動でブロック 執拗な攻撃を防ぐ

ここまでやれば、あなたのサーバーのセキュリティは VPS ユーザーの 90% を超えたことになるよ。


次回予告

次回は SSH 鍵ログイン設定クイックリファレンス を解説していくよ。こんな内容をもう少し詳しく紹介するね:

  • OS 別の鍵生成方法
    |複数鍵の管理
  • SSH Agent の設定
  • 主要な SSH クライアントの設定

この記事の最終更新:2026年1月

独立開発者ツールボックス・シリーズ、ぜひフォローしてね!