دليل شامل لإعداد SSH على Ubuntu: التثبيت، الأمان، واستكشاف الأخطاء خطوة بخطوة

目次

1. المقدمة

إعداد SSH في Ubuntu أمر بالغ الأهمية لإدارة الخوادم عن بُعد. SSH (الصدفة الآمنة) هو بروتوكول يوفر اتصالاً مشفراً وآمناً، ويُستخدم على نطاق واسع للوصول إلى الخوادم عن بُعد، وتنفيذ الأوامر، ونقل الملفات بأمان.

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

1.1 لماذا تقوم بإعداد SSH على Ubuntu؟

1.1.1 ما هو SSH؟

SSH (الصدفة الآمنة) هو بروتوكول يتيح الاتصالات الآمنة عبر الشبكة. يُستخدم SSH عادةً لتسجيل الدخول عن بُعد إلى الخوادم، نقل الملفات، وإنشاء نفق آمن (port forwarding). على عكس Telnet أو FTP، يتم تشفير جميع البيانات المنقولة عبر SSH، مما يوفر مستوى عالٍ من الأمان.

1.1.2 متى تحتاج إلى SSH في Ubuntu؟

هناك عدة سيناريوهات تحتاج فيها إلى إدارة Ubuntu عن بُعد:

  • إدارة الخوادم السحابية: عند استخدام خدمات سحابية مثل AWS أو GCP أو Vultr، تحتاج إلى SSH للاتصال بالخادم وإدارته عن بُعد.
  • التحكم عن بُعد عبر الشبكة المحلية: يمكنك الوصول إلى خوادم الشركة أو أجهزة التطوير عن طريق SSH للعمل عن بُعد.
  • إدارة أجهزة IoT: مثل التحكم عن بُعد في أجهزة Raspberry Pi أو أجهزة مدمجة أخرى باستخدام SSH.

في الإعداد الافتراضي لـ Ubuntu، يكون خادم SSH غير مفعل. لذلك ستحتاج إلى تثبيته وتكوينه يدويًا.

2. الإعداد الأساسي لـ SSH

لاستخدام SSH في Ubuntu، يجب تثبيت خادم SSH (OpenSSH) وتكوينه بشكل صحيح. في هذا القسم، سنشرح خطوات التثبيت، إعدادات SSH الأساسية، تكوين جدار الحماية، وطريقة الاتصال.

2.1 تثبيت وتشغيل OpenSSH

2.1.1 ما هو OpenSSH؟

OpenSSH هو برنامج مفتوح المصدر يُطبق بروتوكول SSH. بالإضافة إلى الاتصال الآمن عن بُعد، يوفر ميزات نقل الملفات الآمن (SCP و SFTP) وتوجيه المنافذ (port forwarding).

2.1.2 تثبيت OpenSSH

في Ubuntu، خادم SSH غير مثبت افتراضيًا. لتثبيته، نفّذ الأمر التالي:

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

سيقوم هذا الأمر بتحديث قائمة الحزم وتثبيت خادم OpenSSH.

2.1.3 بدء وتشغيل SSH تلقائياً

بعد الانتهاء من التثبيت، قم بتشغيل خدمة SSH وتمكينها لتعمل تلقائيًا مع بدء النظام:

sudo systemctl enable --now ssh

باستخدام خيار enable سيتم تشغيل خدمة SSH تلقائيًا عند كل إعادة تشغيل للنظام.

2.1.4 التحقق من عمل SSH

للتحقق من أن خادم SSH يعمل بشكل صحيح، استخدم الأمر التالي:

systemctl status ssh

إذا ظهرت نتيجة مشابهة للآتي، فهذا يعني أن الخدمة تعمل:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

إذا ظهرت حالة inactive (dead) أو failed يمكنك تشغيل الخدمة يدويًا:

sudo systemctl start ssh

2.2 إعداد جدار الحماية (UFW)

يُوفر Ubuntu جدار حماية سهل الإعداد يُسمى ufw (جدار الحماية المبسط). ستحتاج إلى إعداد UFW للسماح باتصالات SSH.

2.2.1 التحقق من حالة UFW

تحقق من حالة جدار الحماية باستخدام:

sudo ufw status

مثال إذا كان UFW معطل:

Status: inactive

مثال إذا كان UFW مفعل:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 السماح باتصال SSH

للسماح بمنفذ SSH الافتراضي 22، استخدم:

sudo ufw allow ssh

أو لتحديد المنفذ يدويًا:

sudo ufw allow 22/tcp

2.2.3 تفعيل UFW

إذا كان UFW غير مفعل، فعّله بالأمر:

sudo ufw enable

قبل التفعيل، تأكد من أن SSH مسموح به حتى لا تفقد الاتصال عن بُعد.

2.2.4 التحقق من الإعدادات

للتحقق من إعدادات الجدار الناري:

sudo ufw status verbose

مثال على الإخراج:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

إذا كان المنفذ 22 مسموحًا، فهذا يعني أن SSH متاح.

2.3 كيفية الاتصال بخادم SSH

بعد التأكد من أن خادم SSH يعمل، يمكنك الاتصال من الحاسوب العميل.

2.3.1 الاتصال من Linux أو macOS

افتح الطرفية ونفّذ الأمر التالي:

ssh اسم_المستخدم@عنوان_IP_الخادم

مثال:

ssh user@192.168.1.100

عند الاتصال لأول مرة، قد يظهر التحذير التالي:

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

اكتب yes واضغط Enter لإكمال الاتصال.

2.3.2 الاتصال من Windows

في Windows، يمكنك استخدام PowerShell أو PuTTY للاتصال بخادم SSH.

باستخدام PowerShell

بدءًا من Windows 10، يتوفر عميل SSH مدمج في PowerShell. استخدم الأمر التالي:

ssh اسم_المستخدم@عنوان_IP_الخادم

باستخدام PuTTY

  1. نزّل وثبّت البرنامج الرسمي PuTTY.
  2. افتح PuTTY وأدخل عنوان IP للخادم في Host Name (or IP address)
  3. عيّن Connection type إلى SSH واضغط Open
  4. أدخل اسم المستخدم وكلمة المرور للاتصال

الخلاصة

في هذا القسم، شرحنا خطوات الإعداد الأساسية لـ SSH في Ubuntu:

  • كيفية تثبيت وتشغيل OpenSSH
  • إعداد الجدار الناري للسماح بالاتصال عبر SSH
  • طرق الاتصال من أنظمة Linux/macOS و Windows

3. تعزيز أمان SSH

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

3.1 حظر تسجيل الدخول كمستخدم root

في بعض إعدادات Ubuntu الافتراضية، قد يكون تسجيل الدخول كمستخدم root مفعلًا، وهذا يمثل خطراً أمنياً كبيراً لأن حساب root يمتلك صلاحيات كاملة. من الأفضل تعطيل تسجيل الدخول المباشر بالـ root واستخدام حساب مستخدم عادي مع صلاحيات sudo.

3.1.1 خطوات الإعداد

  1. حرّر ملف إعدادات SSH /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
  1. ابحث عن السطر PermitRootLogin وقم بتغييره إلى no:
PermitRootLogin no
  1. احفظ الملف وأعد تشغيل خدمة SSH:
sudo systemctl restart ssh
  1. تحقق من التغيير بالأمر التالي:
sudo grep PermitRootLogin /etc/ssh/sshd_config

إذا كانت النتيجة PermitRootLogin no، فقد تم تطبيق الإعداد بنجاح.

3.2 تعطيل المصادقة بكلمة المرور واستخدام مفاتيح SSH

المصادقة باستخدام المفاتيح العامة/الخاصة أكثر أمانًا من كلمات المرور، وتقلل من فرص النجاح لهجمات القوة الغاشمة.

3.2.1 إنشاء مفتاح SSH

أنشئ مفتاح SSH على الحاسوب المحلي:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
  • المفتاح الخاص (id_rsa): احتفظ به في جهازك، لا تشاركه مع أي شخص.
  • المفتاح العام (id_rsa.pub): يُرفع إلى الخادم.

3.2.2 نقل المفتاح العام إلى الخادم

استخدم الأمر التالي لنقل المفتاح العام إلى خادم Ubuntu:

ssh-copy-id اسم_المستخدم@عنوان_IP_الخادم

3.2.3 تعطيل المصادقة بكلمة المرور

حرّر ملف إعداد SSH:

sudo nano /etc/ssh/sshd_config

ابحث عن السطر التالي وعدله إلى:

PasswordAuthentication no

أعد تشغيل خدمة SSH لتطبيق الإعداد:

sudo systemctl restart ssh

3.3 السماح بالوصول عبر SSH لمستخدمين محددين فقط

يمكنك تحديد من يُسمح لهم بالاتصال بخادم SSH عبر إضافة السطر التالي في sshd_config:

AllowUsers user1 user2

ثم أعد تشغيل الخدمة:

sudo systemctl restart ssh

3.4 تغيير منفذ SSH الافتراضي

المنفذ 22 هو الهدف الرئيسي للهجمات. تغيير المنفذ يضيف طبقة أمان إضافية:

sudo nano /etc/ssh/sshd_config
Port 2200
sudo systemctl restart ssh

ولا تنس السماح بالمنفذ الجديد في UFW:

sudo ufw allow 2200/tcp

3.5 منع هجمات القوة الغاشمة باستخدام Fail2Ban

Fail2Ban يقوم بمراقبة محاولات تسجيل الدخول الفاشلة وحظر عناوين الـ IP المشبوهة تلقائيًا.

3.5.1 تثبيت Fail2Ban

sudo apt install fail2ban -y

3.5.2 إعداد الملف jail.local

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 إعادة تشغيل الخدمة

sudo systemctl restart fail2ban

3.5.4 التحقق من قائمة الحظر

sudo fail2ban-client status sshd

الخلاصة

شرحنا في هذا القسم كيفية تقوية أمان SSH:

  • تعطيل تسجيل الدخول بالـ root
  • إلغاء المصادقة بكلمة المرور وتفعيل المفاتيح العامة/الخاصة
  • تحديد المستخدمين المسموح لهم بالوصول
  • تغيير منفذ SSH الافتراضي
  • تثبيت Fail2Ban لمنع الهجمات التلقائية

تطبيق هذه الخطوات سيزيد من أمان اتصالك عن طريق SSH.

4. إعدادات SSH المتقدمة

بعد تطبيق الإعدادات الأساسية وتعزيز الأمان، يمكنك الانتقال إلى إعدادات أكثر تقدمًا لتحسين الأداء والأمان:

4.1 استخدام ssh.socket في Ubuntu 22.10 وما بعده

بدءًا من Ubuntu 22.10، قد تتم إدارة SSH عن طريق ssh.socket بدلاً من ssh.service. يعمل هذا على تشغيل SSH عند الطلب ويوفر موارد النظام.

4.1.1 التحقق من حالة ssh.socket

sudo systemctl status ssh.socket

مثال إذا كان مفعل:

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 تفعيل أو تعطيل ssh.socket

sudo systemctl enable --now ssh.socket

لإعادة التبديل إلى ssh.service التقليدي:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 نفق SSH (توجيه المنفذ)

يمكنك استخدام نفق SSH لنقل البيانات بأمان بين الخادم والجهاز المحلي دون كشفها عبر الإنترنت.

4.2.1 توجيه المنفذ المحلي (Local Port Forwarding)

مثال: الوصول الآمن لقاعدة بيانات MySQL على الخادم من الجهاز المحلي:

ssh -L 3306:localhost:3306 اسم_المستخدم@عنوان_IP_الخادم

4.2.2 التوجيه العكسي (Reverse Port Forwarding)

مثال: نشر خادم الويب المحلي عبر منفذ 8080 في الخادم البعيد:

ssh -R 8080:localhost:80 اسم_المستخدم@عنوان_IP_الخادم

4.2.3 التوجيه الديناميكي (SOCKS Proxy)

يمكنك استخدام SSH كوكيل (Proxy) لتصفح الإنترنت بشكل مجهول:

ssh -D 1080 اسم_المستخدم@عنوان_IP_الخادم

4.3 استقبال SSH على عدة منافذ

  1. حرّر ملف /etc/ssh/sshd_config
Port 22
Port 2200
  1. أعد تشغيل خدمة SSH
sudo systemctl restart ssh
  1. اسمح بالمنفذ الجديد في UFW
sudo ufw allow 2200/tcp

4.4 السماح بالاتصال من عناوين IP محددة فقط

لزيادة الأمان، يمكنك تقييد الوصول إلى SSH ليكون فقط من عناوين IP معينة.

4.4.1 إعداد /etc/hosts.allow

sudo nano /etc/hosts.allow
sshd: 192.168.1.100

4.4.2 إعداد /etc/hosts.deny

sudo nano /etc/hosts.deny
sshd: ALL

بهذا، يُسمح فقط للـ IP المحدد بالوصول، ويتم رفض باقي العناوين.

الخلاصة

تعلمت في هذا القسم كيفية ضبط إعدادات SSH المتقدمة في Ubuntu:

  • إدارة ssh.socket في الإصدارات الحديثة من Ubuntu
  • استخدام توجيه المنفذ (SSH Tunnel) للاتصال الآمن
  • استقبال SSH عبر منافذ متعددة
  • السماح بالوصول فقط من عناوين IP معينة

هذه الإعدادات ترفع مستوى الأمان والكفاءة في إدارة الخوادم عبر SSH.

5. استكشاف أخطاء SSH وإصلاحها

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

5.1 في حال عدم القدرة على الاتصال بـ SSH

إذا ظهرت رسائل مثل Connection refused أو Timeout عند محاولة الاتصال، هناك عدة أسباب محتملة:

5.1.1 خدمة SSH غير نشطة

تحقق من حالة خدمة SSH بالأمر:

sudo systemctl status ssh

الحل:

  • إذا كانت الحالة inactive (dead) أو failed، أعد تشغيل الخدمة:
sudo systemctl restart ssh
  • لضمان التشغيل التلقائي بعد إعادة التشغيل:
sudo systemctl enable ssh

5.1.2 المنفذ غير مفتوح بالشكل الصحيح

إذا تم تغيير منفذ SSH، عليك تحديده عند الاتصال:

ssh -p 2200 اسم_المستخدم@عنوان_IP_الخادم

للتحقق من المنافذ المفتوحة:

sudo netstat -tulnp | grep ssh

أو:

ss -tulnp | grep ssh

5.1.3 تحقق من إعدادات الجدار الناري (UFW)

sudo ufw status

إذا لم يكن SSH مسموحًا:

sudo ufw allow 22/tcp

إذا كنت تستخدم منفذًا مختلفًا، أضف المنفذ الصحيح:

sudo ufw allow 2200/tcp

5.2 إذا ظهرت أخطاء في المصادقة

5.2.1 اسم المستخدم أو كلمة المرور غير صحيحة

تأكد من كتابة اسم المستخدم الصحيح:

ssh اسم_المستخدم@عنوان_IP_الخادم

5.2.2 إعدادات المصادقة بالمفتاح العام غير صحيحة

تحقق من وجود المفتاح في ~/.ssh/authorized_keys على الخادم:

cat ~/.ssh/authorized_keys

وتأكد أنه يطابق المفتاح العام على جهازك المحلي ~/.ssh/id_rsa.pub.

5.2.3 صلاحيات مجلد .ssh غير صحيحة

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

أيضًا تحقق من صلاحيات مجلد المستخدم:

chmod 755 /home/اسم_المستخدم

5.3 إذا كان اتصال SSH غير مستقر أو ينقطع بسرعة

5.3.1 ضبط ClientAliveInterval على الخادم

حرر ملف /etc/ssh/sshd_config وأضف:

ClientAliveInterval 60
ClientAliveCountMax 3

ثم أعد تشغيل SSH:

sudo systemctl restart ssh

5.3.2 ضبط إعدادات العميل المحلي

يمكنك إضافة الإعداد التالي إلى ~/.ssh/config على جهازك:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 التحقق من سجلات SSH (Logs)

5.4.1 عرض السجل بشكل فوري (Real-time)

sudo journalctl -u ssh -f

5.4.2 البحث في السجلات القديمة

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

الخلاصة

في هذا القسم تعلمت كيفية استكشاف مشكلات SSH وحلها:

  • التحقق من حالة خدمة SSH
  • التحقق من فتح المنفذ الصحيح
  • فحص إعدادات الجدار الناري
  • تدقيق إعدادات المصادقة بالمفتاح العام
  • حل مشكلات الوقت والقطع التلقائي
  • الاستفادة من سجلات SSH لتشخيص المشاكل

غالبية مشاكل SSH يمكن حلها بمراجعة الإعدادات الأساسية والشبكة.

6. الأسئلة الشائعة (FAQ)

هنا تجد أجوبة لأكثر الأسئلة شيوعًا حول إعداد واستخدام SSH في Ubuntu.

6.1 كيف أحل مشكلة انقطاع اتصال SSH بعد فترة من الزمن؟

6.1.1 ضبط إعدادات الخادم

ClientAliveInterval 60
ClientAliveCountMax 3

بعد التعديل أعد تشغيل الخدمة:

sudo systemctl restart ssh

6.1.2 ضبط إعدادات العميل المحلي

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 ماذا أفعل إذا نسيت كلمة مرور المستخدم ولا أستطيع الدخول عبر SSH؟

6.2.1 إذا كان لديك وصول فعلي للخادم

  1. شغّل النظام في وضع المستخدم الأحادي (Single User Mode) من قائمة GRUB
  2. أعد تعيين كلمة المرور:
passwd اسم_المستخدم
  1. أعد تشغيل الجهاز

6.2.2 إذا لم يكن لديك وصول فعلي (VPS/Cloud)

  • استخدم ميزة الكونسول في مزود الخدمة السحابية (Cloud Console)
  • يمكنك أيضًا تفعيل تسجيل الدخول عبر المفتاح العام

6.3 كيف أستخدم SSH في Windows؟

6.3.1 باستخدام PowerShell

ssh اسم_المستخدم@عنوان_IP_الخادم

6.3.2 باستخدام PuTTY

  1. نزّل وثبّت PuTTY
  2. أدخل عنوان IP في Host Name (or IP address)
  3. حدد SSH واضغط Open
  4. أدخل اسم المستخدم وكلمة المرور للاتصال

6.4 كيف أضبط SSH على Ubuntu WSL (Windows Subsystem for Linux)؟

6.4.1 تثبيت خادم SSH

sudo apt update && sudo apt install openssh-server

6.4.2 تغيير إعدادات المصادقة

PasswordAuthentication yes

ابدأ الخدمة يدويًا:

sudo service ssh start

6.5 ما هي أفضل تدابير الأمان الإضافية بعد إعداد SSH؟

6.5.1 تثبيت Fail2Ban

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 تغيير منفذ SSH

Port 2200
sudo ufw allow 2200/tcp

6.6 كيف أراقب سجلات SSH بشكل فوري؟

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 كيف أجعل الاتصال عبر SSH أكثر سهولة؟

6.7.1 استخدام ملف .ssh/config للإعداد السريع

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

بعد ذلك يمكنك الاتصال بالأمر:

ssh myserver

6.7.2 استخدام ssh-agent لحفظ عبارة المرور للمفتاح

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

الخلاصة

في هذا القسم جمعنا أهم الأسئلة المتكررة حول SSH مع حلول عملية، لتسهيل إدارة خوادم Ubuntu بأمان وسهولة أكبر.

  • حلول انقطاع الاتصال (Timeout)
  • استعادة كلمة المرور
  • استخدام SSH في Windows وWSL
  • تعزيز الأمان بإجراءات إضافية
  • مراقبة السجلات
  • تسريع الاتصال باستخدام .ssh/config و ssh-agent

باتباعك لهذه النصائح، يمكنك إنشاء بيئة SSH آمنة وموثوقة لإدارة الخوادم عن بُعد.

مقالات ذات صلة

مقالات

1. مقدمة يسمح لك استخدام SSH في Ubuntu بالوصول إلى الخوادم وأجهزة الكمبيوتر والتحكم فيها عن بُعد بأمان. يشرح هذا المقال[…]

年収訴求