ssh2_connect()
を使用しました リモートSSHサーバーへの接続を確立する機能。ただし、あるWebサーバーでは機能し、別のWebサーバーでは失敗します(以降、Webサーバー1およびWebサーバー2と呼びます)。このエラーが発生します–unable to establish connection error
webserver2で。 Webサーバー1と2はどちらもApacheを実行している同一のセットアップであり、奇妙なことに、問題はWebサーバー2の再起動後にのみ発生しました。完全なapacheerror_log
webserver2の概要は次のとおりです。
[Wed Dec 15 10:30:35 2021] [error] [client 192.168.xxx.xx] PHP Warning: ssh2_connect(): Unable to connect to 192.168.xx.xxx on port 22 in /var/www/html/process.php on line 9 [Wed Dec 15 10:30:35 2021] [error] [client 192.168.xxx.xx] PHP Warning: ssh2_connect(): Unable to connect to 192.168.xx.xxx in /var/www/html/process.php on line 9
以下はPHPスクリプトです:
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); if(!($con = ssh2_connect(REMOTE_IP, 22))){ echo "fail: unable to establish connection\n"; } else { // try to authenticate with username root, password secretpassword if(!ssh2_auth_password($con, $username, $password)) { echo "fail: unable to authenticate\n"; header('Location: ../../login/?error=1'); exit(); } else { echo "Logged in..\n"; } }
ssh_connect()を解決する方法:接続を確立できません
ステップ1: リモートサーバーのファイアウォールを確認します。ファイアウォールルールがwebserver2からの接続をブロックしている可能性があります。
ステップ2: 以下のようにwebserver2の端末からSSHをテストしてみましょう:
# ssh <username>@<REMOTE_IP> -p 22
ステップ3: 上記のSSHコマンドが機能する場合は、SELinuxが有効になっているかどうかを確認してください。有効になっている場合は、ブロックされている可能性があるため、WebディレクトリのSELinuxをバイパスしてください。
ステップ4: デフォルトでは、SELinuxはApacheWebサーバーがネットワーク接続を確立するのを防ぎます。
SELinuxを無効にしないでください!CentOS 7では、SELinuxはデフォルトで有効になっています。 SELinuxは、サーバーが要求を処理し、ユーザーがソケット、ネットワークポート、および重要なディレクトリと対話する方法を制限および定義することにより、サーバーのセキュリティを向上させます。システム全体が危険にさらされる可能性があるため、セキュリティ上の理由からSELinuxを無効にすることはお勧めしません。
以下のコマンドを実行して、HTTPDスクリプトとモジュールが任意のTCPポートを使用してネットワークに接続できるようにします。
# /usr/sbin/setsebool -P httpd_can_network_connect 1
以上です!