تصحيح الأخطاء عن بُعد عبر SSH تحت VPN في 4 أدوار

هناك موقف عندما تحتاج إلى إصلاح حالة معقدة على جهاز بعيد ، ولكن الوصول إلى الخادم يكون فقط تحت VPN مع قيود على المنافذ المفتوحة. أريد في المقالة أن أشارك مع زملائي "مناقشة" صغيرة حول موضوع تصحيح الأخطاء عن بُعد عبر SSH تحت VPN لتوفير وقت ثمين في الإعداد. أنا أعتبر المهمة أنجزت إذا كان هذا الرجل مفيد لشخص ما.

المفسد
تم نشر الخادم في أوبونتو ، على التوالي ، كذلك ستكون جميع إعدادات الخادم تحت أوبونتو. على الجهاز المحلي - Mac ، ولكن هنا نحتاج فقط إلى عميل SSH و IDE مع مصحح أخطاء xdebug ، وبالتالي فإن الإعدادات عالمية نسبيًا.

استهلالي


لذلك ، هناك خادم بعيد وراء دائرة محمية. على الخادم في وحدة الإرساء ، تم تشغيل خدمة microservice مع xdebug. لا يمكن الوصول من الخارج إلا عبر SSH وعبر VPN.

هدف


الغرض: بدء تصحيح الأخطاء عن بُعد من خدمة microservice محليًا من خلال xdebug.

دعنا نذهب ...

1. تكوين sshd على خادم بعيد


أول شيء يجب الانتباه إليه هو أنك تحتاج إلى تكوين sshd على الخادم بحيث يسمح لك بقبول الاتصالات من أي IP ، وليس فقط 127.0.0.1. افتراضيًا ، يتم تعطيل هذا الخيار.

هذا هو المكان الذي يحتاج الجذر. سنفترض أن لديك :-)

sudo echo "GatewayPorts yes" >> /etc/ssh/sshd_config sudo service ssh restart 

2. معرفة عنوان الجهاز المضيف في شبكة عامل ميناء


نظرًا لأن xdebug يعمل في الجهاز المحمول ويربط نفسه بالجهاز المحلي (وفي هذه الحالة ، لم يتم حل عنوان IP هذا ، لأنه اتصال VPN) ، فمن المفيد معرفة عنوان IP الخاص بجهاز المضيف على شبكة عامل النقل. يمكن القيام بذلك باستخدام الأمر (التشغيل على الخادم):

 ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+' 

لنفترض أن الفريق أصدر "172.17.0.1"

3. نقوم بتسجيل IP للمضيف البعيد في إعدادات xdebug في الحاوية


مثال على الاستبدال من خلال sed ، ولكن يمكنك أيضًا استخدام الأقلام في المحرر ، كما تفضل:

 sed -i 's/xdebug.remote_host=.*/xdebug.remote_host=172.17.0.1/' /usr/local/etc/php/conf.d/xdebug.ini 

بدون الخروج من السجل النقدي ، نصف المنفذ "الصحيح" للتصحيح. في حالتي ، يتم رفع الخدمة المجهرية على حفنة من nginx و php-fpm وعادةً ما يكون المنفذ 9000 مشغولًا بموجب php-fpm ، وبالتالي أستخدم المنفذ 9001 للتصحيح.

 sed -i 's/xdebug.remote_port=.*/xdebug.remote_port=9001/' /usr/local/etc/php/conf.d/xdebug.ini 

تجدر الإشارة هنا إلى أن تصحيح الأخطاء عن بُعد ، من حيث المبدأ ، مُمكّن: "xdebug.remote_enable = 1"

 grep xdebug.remote_enable /usr/local/etc/php/conf.d/xdebug.ini 

عادةً ما تكون هذه الإعدادات سلكية إلى Dockerfile أو يتم تثبيتها عبر وحدة التخزين.

كل شيء جاهز على الخادم. الآن يتم نقلنا إلى الجهاز المحلي لبناء نفق.

4. إعادة توجيه نفق SSH إلى الخادم البعيد


يتم رفع النفق بواسطة الأمر (يعمل على الجهاز المحلي):

 SSH -R 9001:0.0.0.0:9001 user@remote_server 

في هذا المكان يبدو الموسيقى السحرية. يتم الإعداد الرئيسي ، ثم فقط بيئة التصحيح.

إعداد IDE


عادةً ما أستخدم vscode ، لذلك يبدأ مصحح الأخطاء عبر الاستماع إلى المنفذ دون مشاكل. سأقدم مثالاً على تهيئة vscode (فقط أضف عقدة إلى launch.json):

  { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9001, "cwd": "${workspaceFolder}", "pathMappings": { "/repo": "${workspaceRoot}" } }, 

"PathMappings" هي قاعدة تعيين الدلائل الخاصة بالأجهزة المحلية والبعيدة ، حيث يكون "/ repo" هو الدليل الذي يحتوي على تعليمة برمجية مصححة في عامل النقل. يجب أن يكون مصحح الأخطاء قادراً على التنقل في الملفات ونقاط التوقف.

PS حسنا ، أقوى؟


قم بتشغيل netcat على الجهاز المحلي واستمع إلى:

 nc -l 9001 

قم بتشغيل البرنامج النصي أحادي السطر في عامل الإرساء ثم اطبع:

 php -r 'print("Hi!" . PHP_EOL);' 

على الجهاز المحلي ، يجب أن نرى علامات الدعوة xdebug:

 <?xml version="1.0" encoding="iso-8859-1"?> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug"... 

الصيحة! كل شيء جاهز.

الآن يمكنك تصحيح التعليمات البرمجية المفضلة على الجهاز البعيد في IDE. هناك ناقص واضح في الطريقة الموضحة: إعادة تكوين sshd على الخادم. ربما هناك طريقة أكثر "هادئة". في أي حال ، سأكون سعيدًا لتعليقاتك واقتراحاتك.

شكرا لاهتمامكم!

Source: https://habr.com/ru/post/ar454640/


All Articles