Saya telah menggunakan ssh2_connect()
berfungsi untuk membuat koneksi ke server SSH jarak jauh. Tetapi ini berfungsi di satu server web dan gagal di yang lain (sebut saja sebagai webserver1 dan webserver 2 selanjutnya). Saya mendapatkan kesalahan ini – unable to establish connection error
di server web2. Baik server web 1 &2 adalah pengaturan identik yang menjalankan Apache dan yang aneh adalah bahwa masalah hanya terjadi setelah reboot server web2. error_log
apache lengkap dari webserver2 adalah sebagai berikut:
[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
Di bawah ini adalah script 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"; } }
Cara mengatasi ssh_connect() :tidak dapat membuat koneksi
Langkah 1: Periksa firewall di server jauh. Aturan firewall mungkin memblokir koneksi dari server web2.
Langkah 2: Mari kita uji SSH dari terminal webserver2 seperti di bawah ini:
# ssh <username>@<REMOTE_IP> -p 22
Langkah 3: Jika perintah SSH di atas berfungsi, maka periksa apakah SELinux diaktifkan. Jika diaktifkan, pastikan untuk melewati SELinux untuk direktori web karena mungkin memblokir.
Langkah 4: Secara default, SELinux mencegah server web Apache membangun koneksi jaringan.
Jangan nonaktifkan SELinux!Pada CentOS 7, SELinux diaktifkan secara default. SELinux meningkatkan keamanan server dengan membatasi dan mendefinisikan bagaimana server memproses permintaan dan pengguna berinteraksi dengan soket, port jaringan, dan direktori penting. Tidak disarankan untuk menonaktifkan SELinux karena alasan keamanan karena Anda akan membiarkan seluruh sistem disusupi.
Jalankan perintah di bawah ini untuk mengizinkan skrip dan modul HTTPD terhubung ke jaringan menggunakan port TCP apa pun.
# /usr/sbin/setsebool -P httpd_can_network_connect 1
Itu dia!