VPSにSSH接続できない?
「Connection refused」から接続成功までの全手順
VPSを契約して、いざSSH接続しようとしたら「Connection refused」。初めてのVPSだと焦りますよね。
この記事では、同じエラーに実際にハマった筆者が、原因の切り分けから公開鍵認証で接続するまでの手順をステップごとに解説します。
こんな人向けの記事です
- VPSを契約したが、SSHで接続できない
- 「Connection refused」や「Permission denied」が出て困っている
- 公開鍵認証の設定方法を知りたい
Connection
refused
refused
→
状態確認
& インストール
& インストール
→
unmask
& 起動
& 起動
→
公開鍵
登録
登録
→
接続
成功
成功
環境
| 項目 | 詳細 |
|---|---|
| クライアント | macOS(Apple Silicon) |
| サーバー | Ubuntu 20.04(VPS) |
Step 1接続を試みる
ローカル(自分のPC)
ssh ユーザー名@サーバーのIPアドレス
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
ポート22(SSHのデフォルトポート)で接続を拒否されました。サーバー側でSSHサーバーが起動していない可能性が高いです。
Step 2サーバー側でSSHの状態を確認する
SSHが使えないので、VPSのWebコンソール(管理画面から起動できるブラウザ上の端末)からサーバーにログインして確認します。
サーバー
sudo systemctl status sshd
Unit sshd.service not found.
サービスが見つかりません。openssh-server がインストールされていないか、サービス名が異なる可能性があります。
Step 3openssh-server をインストールする
サーバー
sudo apt update && sudo apt install -y openssh-server
今回は「already the newest version」と表示され、パッケージ自体はインストール済みでした。未インストールの場合はここで自動的にインストールされます。
Step 4SSHサービスを起動する
Ubuntu と CentOS でサービス名が異なります
Ubuntu / Debian系 → ssh | CentOS / RHEL系 → sshd
サーバー
sudo systemctl start ssh
Failed to start ssh.service: Unit ssh.service is masked.
今度は masked(マスク) という見慣れないエラーが出ました。
「masked」って何?
マスクとは、systemctl disable よりもさらに強力な無効化設定です。マスクされたサービスは start コマンドでも起動できません。VPSの初期イメージによっては、セキュリティのためにSSHがマスク状態で提供されていることがあります。
Step 5マスクを解除して起動する
サーバー
# マスク解除
sudo systemctl unmask ssh
# 起動
sudo systemctl start ssh
# 自動起動を有効化(再起動しても自動で立ち上がる)
sudo systemctl enable ssh
これでSSHサーバーが起動しました。ただし、この状態で再度接続を試みると……
Permission denied (publickey).
今度は別のエラーです。パスワード認証が無効になっていて、公開鍵認証が必要ということです。
Step 6公開鍵認証を設定する
6-1. クライアント側で公開鍵を確認する
ローカル(自分のPC)
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAA... のような文字列が表示されればOKです。
何も表示されない(鍵がない)場合は、以下で作成します。
ローカル(自分のPC)
ssh-keygen -t ed25519
6-2. サーバー側で公開鍵を登録する
VPSのWebコンソールから以下を実行します。ここに公開鍵を貼り付け の部分を、先ほど確認した鍵の内容に置き換えてください。
サーバー
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo 'ここに公開鍵を貼り付け' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
パーミッション設定を間違えると鍵が無視されます
SSHはセキュリティ上の理由から、パーミッションが正しくないファイルを無視します。.ssh → 700(所有者のみ読み書き実行)authorized_keys → 600(所有者のみ読み書き)これらは必ず設定してください。
Step 7接続テスト
ローカル(自分のPC)
ssh ユーザー名@サーバーのIPアドレス
ユーザー名@ホスト名:~$
サーバーのプロンプトが表示されれば接続成功です。
エラー早見表
| エラーメッセージ | 原因 | 対処コマンド |
|---|---|---|
Connection refused |
SSHサーバーが起動していない | systemctl start ssh |
Unit sshd.service not found |
サービス名が違う(Ubuntu は ssh) | systemctl start ssh |
ssh.service is masked |
サービスがマスクされている | systemctl unmask ssh |
Permission denied (publickey) |
公開鍵が未登録 / パーミッション不正 | authorized_keys に鍵を追加 |
Connection timed out |
ファイアウォールでポート22がブロック | ufw allow 22 |
まとめ
SSH接続のトラブルは「どこで止まっているか」を一つずつ切り分ければ必ず解決できます。接続できないときは、以下の順にチェックしてみてください。
- openssh-server がインストールされているか
- サービスがマスクされていないか
- サービスが起動しているか
- ファイアウォールでポート22が開いているか
- 公開鍵が正しいパーミッションで登録されているか