دليل عملي شامل لـ SSH على أوبونتو - من الاتصال وتوجيه المنافذ إلى إعدادات الأمان في خطوة واحدة

نظرة عامة

يُعد SSH (Secure Shell) بروتوكول شبكة قياسيًا وأساسيًا لإدارة خوادم لينكس عن بُعد. سنتناول في هذا المقال، خطوة بخطوة في بيئة أوبونتو، كيفية إنشاء خادم OpenSSH، والمصادقة بالمفتاح العام دون كلمة مرور، وإعادة توجيه منافذ SSH للاتصال الشبكي العملي، بالإضافة إلى أهم النصائح لتعزيز الأمان.

1. تثبيت خادم OpenSSH وتفعيل الخدمة

لتوفير خدمة الاتصال عن بُعد على نظام أوبونتو، نقوم بتحديث قائمة الحزم إلى أحدث إصدار وتثبيت حزمة openssh-server.

sudo apt-get update -qq && sudo apt-get install -y openssh-server

لتفعيل خدمة SSH المُثبتة لتبدأ تلقائيًا عند تشغيل النظام وتشغيلها على الفور، نقوم بتنفيذ الأمر systemctl enable --now ssh.

sudo systemctl enable –now ssh

نتحقق مما إذا كان برنامج خلفية خدمة SSH (sshd) يعمل بشكل سليم وفي حالة نشطة (active (running)).

sudo systemctl status ssh –no-pager

للتحقق مما إذا كان يستمع في وضع الانتظار (LISTEN) على المنفذ 22، وهو المنفذ الافتراضي لـ SSH، في انتظار اتصالات الشبكة، نقوم بتنفيذ الأمر ss -tulpn | grep :22.

ss -tulpn | grep :22

2. إنشاء وتسجيل زوج مفاتيح SSH للاتصال بدون كلمة مرور

نقوم بإنشاء المجلد ~/.ssh لتخزين ملفات مفاتيح SSH بأمان، ونضبط الأذونات على 700 بحيث لا يمكن لأحد الوصول إليه سوى المالك.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

في حال عدم وجود زوج مفاتيح يعتمد على خوارزمية Ed25519، المتميزة بأمانها العالي وأدائها الممتاز، نقوم بتنفيذ الأمر test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 لإنشاء زوج جديد.
من نتيجة تنفيذ الأمر، يمكننا التأكد من إنشاء المفتاح الخاص (id_ed25519) والمفتاح العام (id_ed25519.pub) بنجاح.

test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N ’’ -f ~/.ssh/id_ed25519

نقوم بإضافة محتوى المفتاح العام الذي تم إنشاؤه إلى ملف المفاتيح المصرح بها ~/.ssh/authorized_keys.

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

للحفاظ على أمان ملف قائمة مفاتيح المصادقة واجتياز الفحص الصارم للأذونات من قِبل برنامج خلفية SSH، نقوم بتقييد أذونات الملف authorized_keys وضبطها على 600.

chmod 600 ~/.ssh/authorized_keys

نحدد المفتاح الخاص Ed25519 الذي أنشأناه ونحاول الاتصال بعنوان الاسترجاع المحلي (127.0.0.1) للتحقق مما إذا كانت المصادقة القائمة على المفاتيح تعمل بشكل سليم.
تُظهر نتيجة تنفيذ الأمر رسالة تؤكد نجاح الاتصال عبر مصادقة المفتاح المحلي دون الحاجة لإدخال كلمة مرور.

ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no $(whoami)@127.0.0.1 ’echo SSH 로컬 키 인증 접속 성공!’

3. التوجيه النفقي للشبكات عمليًا: تطبيق إعادة توجيه منافذ SSH

لتشغيل خادم الويب واختبار طلبات HTTP، نقوم بتحديث قائمة الحزم وتثبيت حزمتي curl وpython3.

sudo apt-get update -qq && sudo apt-get install -y curl python3

لإنشاء دليل مستندات الويب لاستخدامه في اختبار إعادة توجيه المنافذ وإنشاء ملف HTML اختباري، نقوم بتنفيذ الأمر mkdir -p /tmp/webroot && echo '<h1>SSH Tunnel Test OK</h1>' > /tmp/webroot/index.html.

mkdir -p /tmp/webroot && echo ‘SSH Tunnel Test OK’ > /tmp/webroot/index.html

لتشغيل خادم ويب بسيط في الخلفية على المنفذ 8080 ليعمل كخدمة داخلية، نقوم بتنفيذ الأمر python3 -m http.server 8080 --directory /tmp/webroot >/dev/null 2>&1 &.

python3 -m http.server 8080 –directory /tmp/webroot >/dev/null 2>&1 &

نقوم بتشغيل إعادة توجيه المنفذ المحلي في الخلفية لتمرير الطلبات الواردة إلى المنفذ المحلي 9090 عبر نفق SSH الآمن إلى المنفذ 8080 على الخادم الهدف.
بعد تنفيذ الأمر، يتم إنشاء نفق إعادة توجيه المنفذ بأمان في الخلفية دون حجز جلسة الطرفية.

ssh -f -N -L 9090:localhost:8080 -o StrictHostKeyChecking=no $(whoami)@127.0.0.1

نرسل طلب HTTP إلى المنفذ المحلي 9090 المعاد توجيهه عبر نفق SSH للتحقق من أن الاتصال بخادم الويب الداخلي يتم ترحيله بشكل سليم.
تُظهر نتيجة تنفيذ الأمر استجابة خادم الويب الداخلي على المنفذ 8080، وهي <h1>SSH Tunnel Test OK</h1>، مما يؤكد أن إعادة توجيه المنفذ تعمل بشكل مثالي.

curl -s http://localhost:9090

بعد اكتمال اختبار إعادة توجيه المنفذ، نقوم بتنفيذ الأمر pkill -f 'http.server 8080' لإنهاء عملية خادم الويب الاختباري التي كانت تعمل في الخلفية بأمان.

pkill -f ‘http.server 8080’

4. إعدادات تعزيز أمان خادم SSH عمليًا (sshd_config)

للتحسب لأي طارئ قد يحدث أثناء تعديل الإعدادات والاحتفاظ بنسخة من التكوين الأصلي، نقوم بعمل نسخة احتياطية من ملف الإعدادات باستخدام الأمر sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

لتعزيز الأمان ومنع تسجيل الدخول المباشر عن بُعد لحساب الجذر (root) تمامًا، نقوم بتنفيذ الأمر sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config لتعديل قيمة الإعداد.

sudo sed -i ’s/^#PermitRootLogin./PermitRootLogin no/’ /etc/ssh/sshd_config

للتحقق مسبقًا وبأمان من خلو ملف إعدادات خادم SSH المعدل من أي أخطاء نحوية أو إملائية، نقوم بتنفيذ الأمر sudo sshd -t.
بعد تنفيذ الأمر، لا تظهر أي رسالة خطأ، مما يؤكد صحة صياغة الإعدادات وخلوها من المشاكل.

sudo sshd -t

للتحقق من تطبيق خيار حظر تسجيل دخول الجذر (PermitRootLogin no) بشكل صحيح في ملف الإعدادات، نقوم بتنفيذ الأمر grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config || echo '설정 검증 완료'.
تُظهر نتيجة تنفيذ الأمر ظهور PermitRootLogin no بنجاح، مما يؤكد تطبيق إعداد الأمان بالكامل.

grep -E ‘^(PermitRootLogin|PasswordAuthentication)’ /etc/ssh/sshd_config || echo ‘설정 검증 완료’

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