n8nやClaude Code、Dify、Ollamaなど、VPSでAIツールを動かす手順記事はどれも「VPSにSSH接続できる状態」から始まります。ところが、パスワード認証をやめて鍵認証に切り替え、最低限のファイアウォールまで設定した「安全に作業できる状態」を自分で作れる初心者は多くありません。この記事は共通の土台だけを切り出し、手を動かしながら30分以内で作る手順です。

本記事の実測は、VPS実機ではなくローカルPC上のDockerコンテナ(Ubuntu 22.04・メモリ1GB/CPU1相当に制限)で行っています。sshd・ufw・fail2banの挙動は実機と同じUbuntuパッケージで確認していますが、実際のインターネット越しの到達性や画面操作は実測範囲外です。

この記事で解決すること(AIツール別記事に入る前の共通土台)

この記事を最後まで進めると、次の状態になります。

SSH鍵認証・作業ユーザー・ufw・次の記事へ、の4項目を示した図
この記事を終えると、鍵認証・作業用ユーザー・ufwの3点が整い、目的のAIツール記事にそのまま進める。
  • パスワード認証を無効化した鍵認証だけのSSH接続に切り替えられている
  • 作業用の一般ユーザーで日常作業ができる
  • ufw(Ubuntuに標準で使えるファイアウォールの簡易操作ツール)で、必要なポート以外を閉じている
  • n8n・Claude Code・Dify・Ollamaなど、目的のAIツール記事にそのまま進める

n8nのインストール手順やDifyのDocker Compose設定など、個別ツールの話はここでは扱いません。導入記事に進む前の、共通の土台作りだけに絞っています。

迷ったらこれ:最小構成(SSH鍵認証+ポート変更+ufw)

初めてVPSでSSHの初期設定をするなら、次の3点を最小構成として押さえてください。

鍵認証・ポート変更・ufwの3ステップと所要時間を示した図
初めての初期設定はこの3点が最小構成。検証環境ではここまで通して約11分だった。
  1. パスワード認証を止めて、SSH鍵認証だけでログインできるようにする
  2. SSHのポート番号を22番から変更する
  3. ufwで、変更後のSSHポート以外をすべて閉じる

実測では、パッケージ導入からこの3点まで通して約11分で終わりました(検証環境での計測。VPS実機では回線状況やコンソールの応答速度で前後します)。

SSH接続の初期設定に自信がないままVPSでAIツールを動かしたい人は、まずシンVPSを契約し、この最小構成から始めるのがおすすめです。大容量メモリ1GBプランは月額451円〜(36ヶ月契約時・2026-09-01の料金改定後・2026-09-12確認)で、今回実測した最小構成をそのまま試すのに十分な価格帯です。OS(Ubuntu)レベルの手順のため、パネル機能の違いに関わらずどのVPS事業者でも同じように進められます。契約が終わったら、最初の5分でやることは1つだけです。ローカルのターミナルでssh-keygenを実行し、鍵ペアを1組作ってください。

合わない人: すでに別のVPSで同じ設定を済ませている人、社内のセキュリティポリシーで鍵の管理方法が指定されている人は、自社のルールを優先してください。

最短手順(6ステップ・所要時間つき)

ufw statusの出力。Default: deny (incoming)と2222/tcp ALLOW INの行
ufwを有効化すると既定で受信をすべて拒否し、許可した2222番ポートだけが開く(実測)。

ステップ1: 初回接続とOSの初期状態を確認する

VPS契約直後の接続方法は事業者によって異なります(コンソールからのログイン、初期パスワードの通知など)。この部分は事業者の案内に従ってください(この記事では実測していません)。

知っておくと安心なのは、OS標準の状態では、rootへのパスワードでのSSHログインは最初から拒否されるという点です。検証環境で素のUbuntu 22.04 + OpenSSHにパスワード認証を試すと、設定を何も変えていない時点で拒否されました。「VPSは最初rootのパスワードでSSHログインできる」という前提のガイドも見かけますが、それができる場合はVPS事業者側がイメージの設定を変更しているケースです。OS単体の初期状態とは分けて考えてください。

ステップ2: 必要なパッケージを導入する(実測84秒)

SSHサーバー・ufw・fail2banをまとめて導入します。

apt-get install -y openssh-server ufw fail2ban

検証環境での実測では84秒で完了しました(ネットワークやキャッシュの状態で前後)。導入直後に実効中の設定を確認すると、ポートは22番、rootへのパスワード認証は拒否、公開鍵認証は許可という状態がすでに効いていました。設定ファイルの該当行がコメントアウトのままでも、Ubuntuパッケージのデフォルト値がその時点で有効です。

ステップ3: 作業用ユーザーを作る

root以外の作業用ユーザーを1つ作ります。

adduser labwork

検証環境では自動化オプション付きで数秒で作成できました(通常は対話形式でパスワード設定を求められます)。

管理者権限(sudo)の付与は、この検証では実施していません(未実測)。一般的にはusermod -aG sudo labworkで付与しますが、-aを付け忘れると既存の所属グループから外れる点に注意してください。-G単体は上書き、-aGは追加という違いです。事業者のイメージによってはsudoコマンド自体が入っていないこともあるため、実行前にwhich sudoで存在を確認しておくと安心です。

ステップ4: SSH鍵を作り、鍵認証だけに切り替える

作業用ユーザーで鍵ペアを作成します。

ssh-keygen

引数を付けずに実行すると、Ed25519という形式の鍵が作られます。検証環境では秘密鍵ファイル411バイト、公開鍵はssh-ed25519 AAAA...で始まる1行のテキストとして生成されました。

続いてSSHの動作を決める設定ファイル/etc/ssh/sshd_configを編集し、次の3行を設定します(ポート番号は22番以外なら任意。ここでは例として2222を使用)。

Port 2222
PermitRootLogin no
PasswordAuthentication no

設定後は文法エラーがないか確認してからsshdを再起動します。

公開鍵をサーバー側のauthorized_keys(ログインを許可する公開鍵の一覧ファイル)に登録し、実際に鍵だけでログインが成功する場面の確認は、この検証では行っていません(未実測)。登録時は権限に注意してください。~/.sshは700、authorized_keysは600という権限が必要です。他のユーザーが書き込める状態だと、sshdはそのファイルの利用自体を拒否します。

ステップ5: 接続を確認する(実測)

設定変更後、ネットワーク越しに2つのポートへ接続を試しました。

  • 変更前のポート(22番): 応答なし(バナーの取得に失敗)
  • 変更後のポート(2222番): SSHのバナーは返るが、パスワードで認証しようとすると「許可されている認証方式は公開鍵のみ」という趣旨のメッセージで即座に拒否される

設定した内容が、ネットワーク越しに反映されていることを確認できました。

ステップ6: ufwで必要なポート以外を閉じる(実測)

最後にufwを有効化します。

ufw default deny incoming
ufw allow 2222/tcp
ufw enable

検証環境ではDocker特有の権限制約でひと手間必要でしたが(VPS実機にはこの制約はありません)、設定後は状態確認で「有効・受信は拒否・送信は許可」と表示され、変更後のSSHポート以外が閉じていることを確認できました。

ここまで6ステップ、実測で合計約11分でした。予算に見込んでいた30分以内に十分収まります。

SSH接続の初期設定に自信がないままVPSを契約するのが不安な人は、シンVPSでこの6ステップをそのまま試すのがおすすめです。大容量メモリ1GBプランは月額451円〜(36ヶ月契約時・2026-09-01改定後・2026-09-12確認)で、この記事の検証と同じ最小構成を試すのに十分な価格帯です。ここまでの手順はOSレベルの設定なので、契約するVPS事業者を問わず同じように再現できます。

エディタから直接編集する:VSCode Remote-SSHで接続する

ここまでの設定が終われば、ローカルのVSCodeから直接VPS上のファイルを編集できる「Remote-SSH」拡張機能(VSCodeからリモートサーバーへSSH経由で接続する公式機能)が使えます。公式の前提条件は、ローカル側がOpenSSH互換クライアント必須、リモート側(VPS側)がUbuntu 16.04以降などglibcベースのLinux(Alpine Linuxのような軽量ディストリビューションは非対応)でメモリは最低1GB・推奨2GB以上です。

VSCode Remote-SSH接続までの3ステップを示した図
~/.ssh/configに接続先を登録し、Remote-SSH拡張から選ぶだけで接続できる(設定手順は公式準拠・実接続は未実測)。

接続設定は、ローカルの~/.ssh/configに次の形式で追記します。

Host myvps
  HostName <VPSのIPアドレス>
  User labwork
  Port 2222
  IdentityFile ~/.ssh/<秘密鍵のファイル名>

VSCodeの拡張機能検索から「Remote - SSH」をインストールし、左下の接続アイコンからmyvpsを選ぶと接続が始まります。

この記事の検証では、鍵認証でのログイン成立とVSCodeの接続確立までは確認していません(未実測)。設定手順は公式ドキュメントの記載に基づきます。実際に試す際は、まず通常のターミナルからssh myvpsでログインできることを先に確認してから、VSCode側を試すと切り分けやすいはずです。

VPS接続の確認が取れたら、次のステップは目的のツール(n8n・Claude Code・Difyなど)をVPS上でセットアップします。その中でも、Claude CodeをVPSに常駐させて自動化タスクを実行したい場合は、Claude CodeをVPSに常駐させる実測ガイドで具体的な手順を確認できます。

VPS選びの最低ライン(メモリ・OS・リージョン)

VPSを選ぶ段階で押さえておきたい基準は次の3つです。

シンVPS公式サイトのメモリ別月額料金表。1GBプランの行に円マーカー
シンVPS公式サイトの料金表。大容量メモリ1GBプランは月額451円〜(2026-09-01改定後・2026-09-12確認)。

メモリ: VSCode Remote-SSHの前提条件は最低1GB、推奨2GB以上です。AIツールを併用する場合は各ツール記事の要件を優先してください。

OS: Remote-SSHはglibcベースのLinuxが対象で、Alpine Linuxのような軽量ディストリビューションでは動作しません。Ubuntuの長期サポート版(LTS)が無難です。ただし選べるバージョンで必要メモリが変わる事業者もあります。一例として、シンVPSでは通常のUbuntu 22.04・24.04は1GB以上、最新の26.04は2GB以上のプランが条件です(2026-09-12確認)。契約前にOSとプランの対応表を確認してください。

予算感: メモリ1GB程度のプランなら月500円前後から契約できる事業者もあります(例: シンVPSの大容量メモリ1GBプランは月額451円〜、2026-09-01の料金改定後・2026-09-12確認)。価格は事業者・契約期間で変わるので最新のプラン一覧で確認してください。

リージョン(データセンターの所在地): 事業者によって国内・海外の選択肢や都市名の公開有無が異なります。接続する場所に近いリージョンがあるかも、体感速度に影響するので確認しておきましょう。

よくある失敗トップ4(SSH接続できない/公開鍵の権限エラー/自分を締め出すufw/ポート変更後に繋がらない)

実際に手を動かすと、次の4つでつまずきやすいところです。

よくある失敗4件とその原因を対応させた表
つまずきやすい4つの失敗は、いずれも設定変更とufw許可の順番・組み合わせのズレが原因。

① SSH接続できなくなる(ポート変更直後) ポートを変更したのにファイアウォール側で新しいポートを開け忘れると、接続がタイムアウトします。ufwの設定を先に済ませてからsshdを再起動する順番を意識してください。

② 公開鍵の権限エラー ~/.sshは700、authorized_keysは600という権限が必要です。他のユーザーが書き込める状態だと、sshdはそのファイルの利用を拒否します。

③ ufwで自分を締め出す 検証環境で、許可済みのポートにufwで拒否設定を試すと、応答していた接続が即座にタイムアウトへ変わりました。許可設定に戻すと即座に復旧します。設定変更は、別経路のアクセス手段を確保した状態で行ってください。

④ ポート変更後に繋がらない sshd_configのPortを書き換えても、ufw側で新しい番号を許可していないと外部からは届きません。「設定変更」と「ufwの許可」はセットで行うと覚えておくと迷いません。

もう一段強くする:rootログイン禁止とfail2ban

最小構成に加え、次の2つをやると更に安全になります。

fail2banのstatus出力。Total failed:6、Currently banned:1を表示
存在しないユーザー名で10回試すと6回失敗した時点で1件がブロックされる(fail2ban実測)。

rootログインの完全禁止 OS標準の状態でも、rootへのパスワードでのSSHログインは拒否されます。ただし鍵認証でのroot接続はデフォルトで許可されたままです。PermitRootLogin noを明示的に設定すると、鍵の有無に関わらずroot宛の接続そのものを塞げます。最短手順のステップ4で、この設定もあわせて済ませています。

fail2banで総当たり攻撃を自動ブロック fail2banは、ログイン失敗を繰り返す相手を自動でブロックする仕組みです。導入しただけでは、SSHを対象にしたジェイル(監視対象の単位)はデフォルトで無効です(既定値は10分間に5回失敗でブロック、ブロック時間10分)。有効にするには設定ファイルで明示的に有効化します。

検証環境では確認を早く終えるため、閾値を3回失敗・10分間・ブロック5分に下げて確認しました。存在しないユーザー名で10回連続ログインを試すと、6回失敗した時点で1件がブロックされ、以降の接続は一切応答がなくなりました。検知からブロックまで実際に動くことを確認できています。

次の一歩:目的別に進む記事

ここまでで、AIツール別の記事に進む共通の土台ができました。n8nやDify、Ollamaが追加のポートを開ける必要がある場合は、それぞれの導入記事で扱います。本記事はSSHで安全に接続できる状態を作るところまでが対象です。

共通土台の次に進む4つの記事(n8n・Claude Code・Dify・Ollama)を示した図
共通の初期設定が終わったら、目的のAIツールに応じてこの4記事のいずれかに進める。

今日やることは1つです。シンVPSを1台契約し、この記事の最小構成だけを今日中に済ませてください。大容量メモリ1GBプランは月額451円〜(36ヶ月契約時・2026-09-01改定後・2026-09-12確認)、設定作業そのものは実測で合計11分でした。

もっと詳しく:SSH鍵の管理・複数VPSの使い分け

SSH鍵の管理 複数のVPSを使い分けるなら、VPSごとに別々の鍵ペアを作り、~/.ssh/configに接続先を追加していくと管理しやすくなります。1つの鍵を使い回すと、1つのVPSで鍵が漏れたとき他のVPSまで影響します。

SSH鍵の管理・パネル登録機能・ログ監視の3項目を示した図
鍵の管理・パネル機能・ログ監視は、運用を始めてから検討すればよい3つの追加項目。

パネルからの鍵登録機能について VPS事業者によっては、コントロールパネルから公開鍵を登録する機能があります(シンVPSにもこの機能があります)。この記事で説明したのはOS(Ubuntu)レベルでの切替で、パネル機能の有無に関わらずどの事業者でも通用します。パネル機能があれば、コマンド操作の一部を省略できます。

ログの監視 logwatchは、ログを定期的にまとめて確認できるログ監視ツールです。詳細度や通知先メールアドレスなどをオプションで指定できます。運用を始めてから導入を検討する項目で、この記事では導入・実行の確認までは行っていません。