عمل اتصال SSH بواسطة PHP

احتجت في عملي الى عمل اتصال بواسطة 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);
}
}
}

أسأل الله أن يكون في ذلك فائدة لكم. إن كانت لديكم اقترحات او طرق أفضل فلا تبخلوا بها

Post to Delicious Post to Digg Post to Reddit Post to StumbleUpon

هذه التدوينة كُتبت ضمن التصنيف برمجة. الأوسمة: , , , , . أضف الرابط الدائم إلى المفضّلة.

أضف تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

*

يمكنك استخدام أكواد HTML والخصائص التالية: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>