SSH(セキュアシェル)は、WordPress開発に欠かせないプロトコル。SSHを使用すると、コーディング等の開発作業を効率化してくれる主要プラットフォームやソフトウェアにアクセスできるようになります。

SSHの使用時に、接続拒否(Connection Refused)を伝えるエラーに遭遇することは、珍しいことではありません。幸い、ちょっとしたトラブルシューティングを行うだけで、簡単に解決可能です。すぐに開発作業を再開することができます。

今回は、SSHの概要と使用事例についてご説明し、PuTTYなどで接続が拒否される主な理由を掘り下げていきます。最後に、トラブルシューティングの手順も見ていきます。

早速本題に入りましょう。

SSHの概要と使用事例

SSH(セキュアシェル、Secure Socket Shellとも)は、保護されていないネットワーク経由で、サイトのサーバーに安全にアクセスするためのプロトコルです。言い換えると、任意のコマンドラインインターフェースを利用して、リモートで安全にサーバーにログインすることができる仕組みです。

WordPressサイトにSSHでリモートアクセス
WordPressサイトにSSHでリモートアクセス

サーバー上のファイルのアップロード、削除、編集のみを行えるファイル転送プロトコル(FTP)とは異なり、SSHではさまざまな操作が可能です。例えば、エラーが原因でWordPressサイトにアクセスできなくなったときにも、SSHを使用してリモートでアクセスすることができます。

また、SSHを使えば以下のような開発者ツールも利用可能です。

  • WP-CLI─WordPressのコマンドライン。新規インストール、プラグインの一括更新、メディアファイルのインポートなど、さまざまな作業が可能
  • Composer─PHPパッケージマネージャー。必要なライブラリと依存関係を取得することで、サイトのコードでいくつかのフレームワークを実装できる。
  • Git─コード変更の追跡に使用されるバージョン管理システム。1つのプロジェクトで共同作業を行う開発チームに特に有用。
  • npm─JavaScriptパッケージマネージャー。コマンドラインとJavaScriptソフトウェアレジストリが含まれる。注意)Kinstaでこの機能をご利用いただくには、Enterpriseプランが必要になります。

なお、SSHの使用は上級者向けです。技術に精通していない一般ユーザーは、SSHで問題を自己解決するのではなく、開発者またはホスティング会社に連絡を取ることをおすすめします。

SSH接続が拒否される原因(接続エラーを引き起こす5つの理由)

SSHを使ってサーバーに接続する際、接続拒否のエラーが発生する原因はさまざまです。

以下、特によくある原因を見ていきましょう。

1. SSHクライアントがダウンしている

SSHを使ってサーバーに接続するには、サーバーでSSHデーモン(バックグラウンドで動作するプロセスで、接続要求を受け付けるプログラム)が実行される必要があります。

このプログラムが機能していないと、サーバーに正常に接続することができず、接続拒否のエラーが発生します。

ターミナルの接続拒否エラー
ターミナルの接続拒否エラー

サーバーのSSHデーモンは、予期せぬトラフィックの急増リソースの停止分散型サービス拒否(DDoS)攻撃など、さまざまな原因でダウンします。以下でご紹介するトラブルシューティングを実行するだけでなく、ホスティング会社に連絡をとり、問題の根本原因を特定してもらうのもおすすめです。

SSHクライアントがダウンしているかどうかは、以下のコマンドで確認できます。

sudo service ssh status

コマンドラインを実行し、状態が「ダウン」であると解された場合は、今回の接続拒否エラーの原因と見てほぼ間違いありません。

2. 認証情報に誤りがある

初歩的ですが、サーバーに接続する際、認証情報に入力ミスがあった可能性もあります。SSHを使用するには、以下の情報が必要になります。

  • ホスト名:接続するサーバーのIPアドレスまたはドメイン名
  • ユーザー名:(S)FTPのユーザー名
  • パスワード:(S)FTPのパスワード
  • ポート:デフォルトのポート番号は22ですが、セキュリティ上の理由から、Kinstaを含む一部のホスティング会社では、SSHポート番号を変更しています。ポート番号は、MyKinstaで確認可能です。

以下のコマンドでも、ポート番号を確認することができます。

grep Port /etc/ssh/sshd_config

このコマンドで、ポート番号が返されます。

上記の各情報が正しく入力されているかを見直しましょう。入力に誤りがあったり、間違ったIPアドレスまたはポート番号を使用したりしているかもしれません。

3. 使用しようとしているポートが閉じている

ポートとは、サーバーへの接続時に指定されるエンドポイントです。上でご説明したポート番号が正しいかどうかはもちろん、そのポートが開いているかどうかも確認してください。

悪意あるユーザーは、ポートを悪用してサーバーにアクセスするため、ポートが開いている状態はセキュリティ上の脆弱性。そのため、未使用のポートは、攻撃を回避するために閉じられることがあります。

22番ポート、またはサーバー独自のSSHポートが閉じている場合は、接続拒否エラーが発生します。以下のコマンドで、ポートが開いているかを確認しましょう。

sudo netstat -plnt

このコマンドで、ポートの一覧とそれぞれの状態が返されます。22番ポートの状態は、「LISTEN(待機中)」でなければなりません。そうでなければ、サーバーに接続するためにポートを開く必要があります。

4. SSHがサーバーにインストールされていない

先にも触れましたが、サーバーはSSHデーモンを使って接続要求を受け付けます。そのため、接続しようとしているサーバーにデーモンがインストールされていない場合、SSHでアクセスすることはできません。

ほぼすべてのホスティング会社は、デフォルトでサーバーにSSHデーモンをインストールしています。SSHデーモンがインストールされていないという状況は、ローカルホストまたは専用サーバーで発生します。

5. ファイアウォールの設定でSSH接続が許可されていない

ポートを開くとセキュリティ上のリスクが生じることを考慮し、サーバーを保護するためにファイアウォールを実装している場合、ポートへの接続がブロックされることがあります。ファイアウォールの設定によって、サーバーにSSHでサーバーに接続しようとしている無害なユーザーでさえも、接続を妨げられてしまうことがあります。

適切な設定を行なっていても接続できない場合は、ファイアウォールのルールも確認してください。 以下のコマンドを実行すると、コマンドラインインターフェースでルールを表示することができます。

sudo iptables-save # display IPv4 rules
sudo ip6tables-save # display IPv6 rules

結果はさまざまですが、以下の要素を探して、ファイアウォールがSSH接続をブロックしているかどうかを調査します。

  • dport 22:宛先ポートで、SSHの場合は22番(Kinstaでは異なるポート番号を使用しています)
  • REJECT:接続を拒否している場合のみ宛先を表示
  • DROP:REJECT同様、該当のポートへの接続が拒否されていることを意味する

上記のコマンドの結果で、「dport 22」を検索すると、ファイアウォールがSSH接続を許可しているかどうかを判別できます。許可していない場合は、接続要求を受け入れるようにルールを変更してください。

PuTTYで接続拒否エラーが表示される原因

PuTTYはSSHクライアントで、FTPで例えるなら、WindowsマシンのSSHに相当するFileZillaと考えてください。PuTTYで認証情報を入力し、SSH接続を行うことができます。

PuTTYのウェブサイト
PuTTYのウェブサイト

PuTTYで接続拒否エラーが表示された場合は、上記のいずれかが原因であると考えられます。

これは他のSSH接続エラーと同じで、PuTTY、ターミナル、あるいはSSHでサーバーに接続する他のどのプログラムを使用していても、次にご紹介するトラブルシューティングが役に立ちます。

SSH接続エラーのトラブルシューティング

SSHの接続エラーが発生する原因は異なり、トラブルシューティングの手順もさまざまです。今回ご紹介した接続拒否(Connection Refused)エラーのトラブルシューティングは以下の通りです。

  • SSHクライアントがダウンしている場合─ホスティング会社に問い合わせ、SSHクライアントが提供されていない理由を確認してください。ローカルホストまたは専用サーバーの場合、sudo service ssh restartコマンドを使用して、SSHクライアントを再実行してみてください。
  • 認証情報が間違っている場合grep Port /etc/ssh/sshd_configコマンドを使用し、SSHポート番号を再確認した上で、正しい認証情報で接続を再試行してください。
  • 使用しようとしているポートが閉じている場合─これは通常、以下2つのどちらかの状況における副次的なものです。接続先のサーバーにSSHデーモンをインストールするか、SSHポートへの接続を受け入れるようにファイアウォールのルールを変更することで、エラーが解決されるはずです。
  • SSHがサーバーにインストールされていない場合sudo apt install openssh-serverコマンドを使用して、接続先のサーバーにOpenSSHなどのSSHソフトウェアをインストールしてください。
  • ファイアウォールの設定でSSH接続が許可されていない場合─宛先ポートの設定を「ACCEPT」に変更し、SSH接続を許可しないファイアウォールルールを無効にしてください。

ホスティング会社のサーバーに接続しようとしている場合は、自分で解決を試みるよりも、カスタマーサポートに問い合わせるのが得策です。ローカルホストまたは専用サーバーの場合、上記の解決策をすべて実行してもエラーが解決しなければ、より専門的なフォーラムでヘルプを探すことをおすすめします。

まとめ

SSHを使用したサーバーへの接続には、非常に便利です。WordPressの管理画面にアクセスできない場合に、サイトにリモートでアクセスしたり、WP-CLIを使用してコマンドを実行したり、Gitでサイトのコード変更を追跡したりすることができます。

SSH接続エラーには様々な原因がありますが、主な原因は以下の通りです。

  1. SSHクライアントがダウンしている
  2. 認証情報に誤りがある
  3. 使用しようとしているポートが閉じている
  4. SSHがサーバーにインストールされていない
  5. ファイアウォールの設定でSSH接続が許可されていない