Linux で SSH の「接続が拒否されました」エラーを修正する方法
SSH は、ネットワーク経由でリモート システムに安全にアクセスして管理できるようにするネットワーク プロトコルです。SSH 経由でリモート マシンに接続しているときに、「接続が拒否されました」というエラーが発生した可能性があります。この問題が発生すると、特にシステム管理者であり、緊急にリモート システムでいくつかのタスクを実行する必要がある場合にイライラする可能性があります。
SSH の「接続が拒否されました」というエラーが発生する原因として考えられるものと、それを解決する方法を見てみましょう。
1. SSH サーバーがインストールされているかどうかを確認する
「接続が拒否されました」というエラーの考えられる原因の 1 つは、リモート マシンが 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
サービスが稼働中の場合、出力はそれをactive (running)と示します。それ以外の場合は、 inactive (dead)のようなものが表示されます。
SSH サーバーが実行されていない場合は、次のコマンドを使用して手動で開始できます。
sudo systemctl start sshd
次のコマンドを使用して、起動時にサービスを自動的に開始することもできます。
sudo systemctl enable sshd
3. SSH ポートを確認する
デフォルトでは、SSH サーバーはポート 22 で実行されます。ただし、デフォルトのポートは変更できます。したがって、SSH の「接続が拒否されました」というエラーが表示された場合は、別のポートで実行されているときに、デフォルト ポート 22 で SSH サーバーに接続しようとしている可能性があります。
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 の 2 要素認証をセットアップできます。
コメントを残す