احتجت في عملي الى عمل اتصال بواسطة PHP وتزويد الاتصال بكلمة المرور ونظراً لأن ذلك متعذر من خلال اقتران exec_shell في PHP فبدأت بالبحث عن طريقة تجعل ما أريد ممكناً.
بحمد الله وفضله عثرت على موقع يشرح ما أريد بالضبط. وإليكم مختصر الطريقة.
هذه الطريقة جرّبت على نظام لينكس Ubuntu مع PHP 5
ما هو مطلوب من أجل عمل ما نريد؟
$sudo aptitude update
$sudo aptitude install php5-dev php5-cli php-pear buid-essential \
$openssl-dev zlib1g-dev
الاوامر اعلاه ستقوم بتنصيب الحزم التي نحتاج إليها إذا كانت هذه الحزم موجودة على نظامك فلا داعي للأمر الثاني.
ثم قم بتنزيل مكتبة libssh2 من موقع sourceforge
cd /usr/src
wget http://surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz
tar -zxvf libssh2-0.14.tar.gz
cd libssh2-0.14/
./configure
make all install
لاحظ أن الحزم التي نحتاج إليها هي 2-0.14 لقد قمت بتجربة آخر اصدارة وهي الان 0.18 ولكن لم تعمل.
اللآن نحتاج إلى ربط libssh2 مع PHP لعمل ذلك ننفذ الامر التالي
pecl install -f ssh2
بعد ذلك نحتاج الى اضافة الامتداد الى ملفي php.ini في
/etc/php5/cli/php.ini, و /etc/php5/apache2/php.ini
موقع هذه الملفات قد يختلف اذا كنت تستخدم نظام آخر غير Ubuntu
اضف هذا السطر الى الملفين اعلاه
extension=ssh2.so
موقع السطر في الملفين السطر 515 او حوله
الان اصبحنا جاهزين لاستخدام هذه الخاصيّة
هناك طريقتان لاستخدام هذه الخاصية:
1- خاصية التنفيذ وهي الخاصية المفضلة
2- خاصية الشل
1- خاصية التنفيذ: تقوم بتنفيذ أمر وارجاع النتيجة الى السكريبت
<pre lang=”php” “>
if (!function_exists(“ssh2_connect”)) die(“function ssh2_connect doesn’t exist”);
// log in at server1.example.com on port 22
if(!($con = ssh2_connect(“server1.example.com”, 22))){
echo “fail: unable to establish connection\n”;
} else {
// try to authenticate with username root, password secretpassword
if(!ssh2_auth_password($con, “root”, “secretpassword”)) {
echo “fail: unable to authenticate\n”;
} else {
// allright, we’re in!
echo “okay: logged in…\n”;
// execute a command
if(!($stream = ssh2_exec($con, “ls -al” )) ){
echo “fail: unable to execute command\n”;
} else{
// collect returning data from command
stream_set_blocking( $stream, true );
$data = “”;
while( $buf = fread($stream,4096) ){
$data .= $buf;
}
fclose($stream);
}
}
}
</pre>
الأمر أعلاه ان يظهر النتيجة ولكن سيقوم بتخزينها في متغير data اذا ارد اظهار النتيجة فقط اضف السطر التالي قبل نهاية السكريبت
echo $data;
2- خاصية الشل خاصية متقدمة حيث انها تقوم بفتح شل فعلي النظام الذي نعمل اتصال معه
if (!function_exists(“ssh2_connect”)) die(“function ssh2_connect doesn’t exist”);
// log in at server1.example.com on port 22
if(!($con = ssh2_connect(“server1.example.com”, 22))){
echo “fail: unable to establish connection\n”;
} else {
// try to authenticate with username root, password secretpassword
if(!ssh2_auth_password($con, “root”, “secretpassword”)) {
echo “fail: unable to authenticate\n”;
} else {
// allright, we’re in!
echo “okay: logged in…\n”;
// execute a command
if(!($stream = ssh2_exec($con, “ls -al” )) ){
echo “fail: unable to execute command\n”;
} else{
// collect returning data from command
stream_set_blocking( $stream, true );
$data = “”;
while( $buf = fread($stream,4096) ){
$data .= $buf;
}
fclose($stream);
}
}
}
أسأل الله أن يكون في ذلك فائدة لكم. إن كانت لديكم اقترحات او طرق أفضل فلا تبخلوا بها