SSH(セキュアシェル)は、WordPress開発に欠かせないプロトコル。SSHを使用すると、コーディング等の開発作業を効率化してくれる主要プラットフォームやソフトウェアにアクセスできるようになります。
SSHの使用時に、接続拒否(Connection Refused)を伝えるエラーに遭遇することは、珍しいことではありません。幸い、ちょっとしたトラブルシューティングを行うだけで、簡単に解決可能です。すぐに開発作業を再開することができます。
今回は、SSHの概要と使用事例についてご説明し、PuTTYなどで接続が拒否される主な理由を掘り下げていきます。最後に、トラブルシューティングの手順も見ていきます。
早速本題に入りましょう。
SSHの概要と使用事例
SSH(セキュアシェル、Secure Socket Shellとも)は、保護されていないネットワーク経由で、サイトのサーバーに安全にアクセスするためのプロトコルです。言い換えると、任意のコマンドラインインターフェースを利用して、リモートで安全にサーバーにログインすることができる仕組みです。
サーバー上のファイルのアップロード、削除、編集のみを行えるファイル転送プロトコル(FTP)とは異なり、SSHではさまざまな操作が可能です。例えば、エラーが原因でWordPressサイトにアクセスできなくなったときにも、SSHを使用してリモートでアクセスすることができます。
また、SSHを使えば以下のような開発者ツールも利用可能です。
- WP-CLI─WordPressのコマンドライン。新規インストール、プラグインの一括更新、メディアファイルのインポートなど、さまざまな作業が可能。
- Composer─PHPパッケージマネージャー。必要なライブラリと依存関係を取得することで、サイトのコードでいくつかのフレームワークを実装できる。
- Git─コード変更の追跡に使用されるバージョン管理システム。1つのプロジェクトで共同作業を行う開発チームに特に有用。
- npm─JavaScriptパッケージマネージャー。コマンドラインとJavaScriptソフトウェアレジストリが含まれる。注意)Kinstaでこの機能をご利用いただくには、Single 1.25MまたはWP 60以上のプランが必要になります。
なお、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で接続拒否エラーが表示された場合は、上記のいずれかが原因であると考えられます。
これは他の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接続エラーには様々な原因がありますが、主な原因は以下の通りです。
- SSHクライアントがダウンしている
- 認証情報に誤りがある
- 使用しようとしているポートが閉じている
- SSHがサーバーにインストールされていない
- ファイアウォールの設定でSSH接続が許可されていない