المصادقة لخادم SFTP في PHP مع ملف مفتاح PuTTY .ppk

أرغب في نقل الملفات عبر SFTP باستخدام PHP.

The remote server provides the IP, username, and a password including PPK file with a passphrase. I'm able to log in using WinSCP, but in my PHP script I'm having trouble with ssh2_auth_pubkey_file()

هل يمكن أن تخبرني ما الذي يفترض القيام به مع ملف PPK المعطى؟ ما هو المفتاح العام والخاص الذي أحتاج لتوفيره للمصادقة؟

شرح واضح هو محل تقدير كبير. شكرا لكم!

الشفرة:

$conn = ssh2_connect($host, $port, array('hostkey'=>'ssh-rsa'));
if(ssh2_auth_pubkey_file($conn,$username,$pub_key,$pri_key,$passphrase)){
  echo "Public Key Authentication Successful\n";
}else{
  die('Public Key Authentication Failed');  
}

المفتاح العمومي الذي استعملته جاء من PuTTYgen. تحويل PPK إلى ملف PUB.

0
استخدم الضفيرة. يجب أن يكون دعم SFTP بشكل افتراضي.
وأضاف المؤلف Anthony, مصدر
نشرLelioFaieta الرمز الخاص بي أعلاه. شكر
وأضاف المؤلف Help, مصدر
MartinPrikryl نعم إنه يتصل. لقد حاولت أيضًا استخدام ssh2_auth_password() وفشلت المصادقة. لذلك حاولت استخدام الدالة ssh2_auth_pubkey_file() منذ أن أعطى الخادم البعيد ملف PPK الخاص به. ما أحاول معرفته هو ما هو المفتاح العام والخاص الذي سأستخدمه؟ المفتاح العام الذي استعملته جاء من PuTTYgen. تحويل PPK الخاصة بهم إلى ملف PUB. هل هي الطريقة الصحيحة؟ من أين أحصل على المفتاح الخاص وأين سأحفظ المفتاح؟ هل يمكن لأحد أن يفسر بشكل صحيح ما أحتاج إلى القيام به؟ شكرا لكم.
وأضاف المؤلف Help, مصدر
هناك حاجة إلى كلمة المرورMartinPrikryl عند تسجيل الدخول في WinSCP ، ولكن الآن منذ حفظ الجلسة ، أحتاج فقط إلى كتابة عبارة المرور لـ pk. قم بإعادة حفظ ملف ppk بدون عبارة مرور. يربط على الفور
وأضاف المؤلف Help, مصدر
مشاركة الرمز الخاص بك
وأضاف المؤلف Lelio Faieta, مصدر
رمزك عديم الفائدة ، حيث إنه لا يُظهر المعلمات التي تمررها إلى الوظيفة. + تأكد أيضًا من فحص ssh2_connect - هل ينجح ذلك؟
وأضاف المؤلف Martin Prikryl, مصدر
وماذا عن "كلمة المرور"؟ هل تحتاج ذلك عند المصادقة مع WinSCP؟
وأضاف المؤلف Martin Prikryl, مصدر
فهل يحتاج الخادم الخاص بك حقًا إلى كل من كلمة المرور ومصادقة المفتاح العام؟ (هذا غير معتاد) يمكنك نشر ملف سجل جلسة WinSCP لإثبات ذلك؟
وأضاف المؤلف Martin Prikryl, مصدر
وأضاف المؤلف Wils, مصدر
ملاحظة جانبية: من أجل المصادقة تحتاج فقط إلى المفتاح الخاص ، يتم تخزين المفتاح العام على الخادم واستخدامه للتحقق من صحة المفتاح الخاص. لمصادقة مع PKK يمكنك على سبيل المثال. استخدام Pageant ، والذي سيوفر مفتاحك الخاص للتطبيقات الأخرى على جهازك المحلي لطلب ذلك للمصادقة.
وأضاف المؤلف tionsys, مصدر

1 إجابة

وظيفة ssh2_auth_pubkey_file تقبل الملفات الرئيسية الخاصة والخاصة بتنسيق OpenSSH.

لتوليد هذه الملفات من ملف التعليمات البرمجية .ppk PuTTY:

  • Start PuTTYgen and load your .ppk key.
  • Use contents of Public key for pasting into OpenSSH authorized_keys file for a public key file.
  • Use Conversions > Export OpenSSH key menu command to generate private key file.

لا يهم المكان الذي تحفظ فيه الملفات ، طالما أن خادم الويب يمكنه الوصول إليها.


يبدو أن هناك خطأ في وظائف PHP SSH2 التي تمنع تحميل مفاتيح خاصة مشفرة (مفاتيح مع عبارة المرور).

نتائج الخطأ في:

ssh2_auth_pubkey_file (): أخفقت المصادقة في ... باستخدام المفتاح العام: رد الاتصال يظهر خطأ


إذا كنت ترغب في استخدام المفتاح الخاص ، ولا يمكنك إصلاح مكتبات SSH ، فيمكنك استخدام phpseclib بدلاً من ذلك.

set_include_path("phpseclib");
require_once("Net/SSH2.php");
require_once("Crypt/RSA.php");

$privatekey = new Crypt_RSA();
$privatekey_data = file_get_contents($pri_key);

$privatekey->setPassword($passphrase);
if (!$privatekey->loadKey($privatekey_data, CRYPT_RSA_PRIVATE_FORMAT_PKCS1))
{
    die("Cannot load key");
}

$sftp = new Net_SSH2($host);

if (!$sftp->login($username, $privatekey))
{
    die("Cannot login");
}

phpseclib يدعم حتى مفاتيح .ppk ، على الرغم من أنني لم أتمكن من استخدام مفتاح .ppk المشفرة سواء. لكن مفاتيح OpenSSH المشفرة تعمل بشكل صحيح. لاحظ أنك لا تحتاج إلى ملف مفتاح عام منفصل مع phpseclib.

0
وأضاف
عندما أقوم بإنشاء حانة من التعليمات الخاصة بك ، يظهر تحذير: بيانات المفتاح غير صالحة ، وليس base64 مشفرة .... ولكن عندما قمت بحفظ مفتاح حانة مثل هذا في دليل PHP ، مثلا: ssh-rsa AAAAB3NzaC1yc2EAAA .... NX6sqSnHA8 = rsa- مفتاح - 20121110 تحذير: استخدام المفتاح العمومي: رد الاتصال الخطأ ...
وأضاف المؤلف Help, مصدر
هل لي أن أسأل عن كيفية تثبيت phpseclib؟ هل أحتاج فقط إلى تنزيل الإصدار 1 ونسخه فقط بلصقه أو هل يلزمني تثبيته عبر الملحن؟ شكرا جزيلا لمساعدتكم مارتن
وأضاف المؤلف Help, مصدر
لا يعمل بالنسبة لي ، يستخدم بروتوكول نقل الملفات بدلا من ذلك. راجع للشغل شكرا جزيلا لمساعدتكم!
وأضاف المؤلف Help, مصدر
في الواقع ، يجب عليك استخدام تنسيق "ssh-rsa" للمفتاح العام. لقد صححت جوابي. بخصوص "رد الاتصال يظهر الخطأ" ، راجع إجابتي المحدثة.
وأضاف المؤلف Martin Prikryl, مصدر
التنزيل واستخراج ما يكفي (في المثال الخاص بي الذي قمت باستخراجه في المجلد الفرعي phpseclib ). + الملحن على ما يرام أيضًا.
وأضاف المؤلف Martin Prikryl, مصدر
هل جعلتها تعمل؟
وأضاف المؤلف Martin Prikryl, مصدر