ウェブサイト検索

LinuxでSSH「接続拒否」エラーを修正する方法


SSHの「接続拒否」エラーは、ネットワーク上のリモートマシンにアクセスするのを妨げることがあります。これをトラブルシューティングする方法は次のとおりです。

SSHは、ネットワークを介してリモートシステムに安全にアクセスし管理するためのネットワークプロトコルです。SSHを介してリモートマシンに接続する際に「接続拒否」エラーに遭遇することがあります。この問題を経験することは特にシステム管理者であり、リモートシステムで緊急にいくつかの作業を実行しなければならない場合には、イライラすることがあります。

SSHの「接続拒否」エラーが発生する可能性のある原因とそれを解決する方法をいくつか見てみましょう。

1. SSHサーバーがインストールされているか確認する

「接続が拒否されました」というエラーの一因として、リモートマシンがSSHサーバーを実行していない可能性があります。SSHサーバーがない場合、そのマシンは受信SSH接続を受け付けず、リモートでアクセスすることができません。

したがって、エラーのトラブルシューティングの最初のステップは、リモートマシンにSSHサーバーがインストールされているかどうかを確認することです。次のコマンドを使用してSSHサーバーのインストールを確認してください:

Debian系のディストリビューションでは:

dpkg --list | grep ssh

RHELベースのディストリビューションで:

yum list installed | grep ssh

openSUSEで:

zypper search -i | grep ssh

Arch系ディストリビューションについて:

pacman -Q | grep ssh

リモートマシンにSSHサーバーがインストールされている場合、出力にリストされているのを見ることができます。そうでない場合は、SSHでアクセスしたいリモートマシンにOpenSSHサーバーをインストールする必要があります。OpenSSHは、リモートでシステムにアクセスし制御するためのSSHツールのオープンソース版です。

OpenSSHサーバーをインストールするには、以下のコマンドを使用してください:

Debian系のディストリビューションでは:

sudo apt install openssh-server

RHELベースのディストリビューションで:

sudo yum install openssh-server

openSUSEで:

sudo zypper install openssh

Arch系ディストリビューションについて:

pacman -S openssh

2. SSHサービスのステータスを確認する

「接続拒否」エラーが発生するもう一つの理由は、リモートマシンでSSHサービスが無効になっているか、実行されていない場合です。SSHサーバーがインストールされていることを確認したら、次に確認すべきことはサーバーの状態です。

sudo systemctl status sshd

サービスが稼働中であれば、出力は アクティブ(稼働中) と表示されます。それ以外の場合は、非アクティブ(停止中) のような表示がされます。

SSHサーバーが実行されていない場合は、次のコマンドを使用して手動で起動できます:

sudo systemctl start sshd

サービスを自動起動するように設定することもできます:

sudo systemctl enable sshd

3. SSHポートを確認する

デフォルトでは、SSHサーバーはポート22で動作します。しかし、デフォルトポートを変更することもできます。したがって、SSHの「接続拒否」エラーが発生した場合、それはSSHサーバーが異なるポートで動作しているのに対して、デフォルトポート22で接続しようとしている可能性があります。

netstatコマンドをgrepと組み合わせて、SSHサーバーがどのポートで待機しているかを見つけることができます:

sudo netstat -plntu | grep ssh

以下のコマンドを使用して、sshd_configファイルからSSHポートも見つけることができます:

grep port /etc/ssh/sshd_config

正しいSSHポートを特定した後、その特定のポートを使用してリモートシステムに接続してみてください。

4. システムファイアウォールをチェックする

接続の問題のほとんどは、あなたのマシンのファイアウォールがいくつかのポートまたはサービスをブロックしているために発生します。リモートマシンにSSHサーバーがインストールされ、稼働している場合、次のステップはファイアウォールを確認することです。

ファイアウォールが接続をブロックしているかどうかを確認するために、次のコマンドを使用して一時的にファイアウォールを無効にしてください。

DebianおよびArchベースのLinuxディストリビューションでは:

sudo ufw disable

RHELベースのディストリビューションおよびopenSUSEでは:

sudo systemctl disable firewalld

ファイアウォールを無効にした後にエラーが表示されない場合、それはファイアウォールが接続をブロックしていたことを意味します。この場合、ファイアウォールを再度有効にし、SSHを許可するルールを追加してください。

DebianおよびArchベースのLinuxディストリビューションでは、UFWファイアウォールでSSHを許可するには、次のコマンドを使用します:

sudo ufw allow ssh

あるいは、ファイアウォールでポート番号を指定してSSHを許可することもできます。たとえば、SSHサーバーがポート5555を使用している場合、ファイアウォールでそれを許可するには次のコマンドを使用します:

sudo ufw allow 5555

ルールが正常に追加されたか確認するには、UFWのステータスを確認してください。

sudo ufw status

RHELベースのディストリビューションやopenSUSEでは、ファイアウォールでSSHを許可するために次のコマンドを使用します:

sudo firewall-cmd --permanent --add-service=ssh

ポート番号によってSSHを許可するには、以下のコマンドを使用します:

sudo firewall-cmd --permanent --add-port={port}/tcp

ポート4444で実行されているSSHサーバーの場合、コマンドは次のようになります:

sudo firewall-cmd --permanent --add-port=4444/tcp

ファイアウォールにルールが正常に追加されたことを確認するには、次のコマンドを実行してください:

sudo firewall-cmd --list-all

5. IPアドレスの競合を解決する

SSHサーバーのIPがネットワーク内の他のシステムのIPと衝突することによって、SSHの「接続拒否」エラーが発生する可能性もあります。これは、ネットワーク上の2つのシステムが同じIPアドレスを使用していると主張する場合に起こり、IPの競合が発生します。

ネットワークにIPの競合があるか確認するために、次のようにarp-scanツールを使用してください:

arp-scan [network-id]

IPの競合がある場合、出力に重複したIPアドレスが表示されます。以下のスクリーンショットは、ネットワーク内のIPの競合の例です:

IPの競合を避けるために、DHCPプールのアドレスと重複する静的IPアドレスを持つデバイスがないことを確認してください。

ボーナスヒント: SSHを冗長モードで実行する

SSHエラーに遭遇した場合は、問題を追跡するためにsshコマンドを冗長モードで実行してみてください。SSHを冗長モードで実行するには、次のように-vvvオプションを使ってsshコマンドを実行します:

ssh -vvv username@ip_address

詳細モードでは、接続の各ステップでデバッグメッセージが表示され、問題がどこにあるのかを理解するのに役立ちます。

LinuxでのSSH「接続拒否」エラーのトラブルシューティング

SSH接続エラーの潜在的な原因を特定し、提案された解決策を実装することによって、SSHの「接続拒否」エラーをトラブルシューティングし、解決することができます。これらの手順に加えて、正しいIPアドレスに接続していることと、正しいログイン資格情報を使用していることを確認してください。

リモート接続をより安全にするために、LinuxのSSHに二要素認証を設定することができます。

関連記事: