- 1 1. المقدمة
- 2 2. الإعداد الأساسي لـ SSH
- 3 الخلاصة
- 4 3. تعزيز أمان SSH
- 5 الخلاصة
- 6 4. إعدادات SSH المتقدمة
- 7 الخلاصة
- 8 5. استكشاف أخطاء SSH وإصلاحها
- 9 الخلاصة
- 10 6. الأسئلة الشائعة (FAQ)
- 10.1 6.1 كيف أحل مشكلة انقطاع اتصال SSH بعد فترة من الزمن؟
- 10.2 6.2 ماذا أفعل إذا نسيت كلمة مرور المستخدم ولا أستطيع الدخول عبر SSH؟
- 10.3 6.3 كيف أستخدم SSH في Windows؟
- 10.4 6.4 كيف أضبط SSH على Ubuntu WSL (Windows Subsystem for Linux)؟
- 10.5 6.5 ما هي أفضل تدابير الأمان الإضافية بعد إعداد SSH؟
- 10.6 6.6 كيف أراقب سجلات SSH بشكل فوري؟
- 10.7 6.7 كيف أجعل الاتصال عبر SSH أكثر سهولة؟
- 11 الخلاصة
- 12 مقالات ذات صلة
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
- نزّل وثبّت البرنامج الرسمي PuTTY.
- افتح PuTTY وأدخل عنوان IP للخادم في
Host Name (or IP address)
- عيّن
Connection type
إلىSSH
واضغطOpen
- أدخل اسم المستخدم وكلمة المرور للاتصال
الخلاصة
في هذا القسم، شرحنا خطوات الإعداد الأساسية لـ SSH في Ubuntu:
- كيفية تثبيت وتشغيل OpenSSH
- إعداد الجدار الناري للسماح بالاتصال عبر SSH
- طرق الاتصال من أنظمة Linux/macOS و Windows
3. تعزيز أمان SSH
SSH هو أداة قوية للاتصال عن بُعد، ولكن ترك الإعدادات الافتراضية قد يؤدي إلى مخاطر أمنية. غالباً ما يستهدف المهاجمون خوادم SSH عبر هجمات القوة الغاشمة أو مسح المنافذ. لذلك، من الضروري تنفيذ إعدادات أمان قوية لتأمين بيئة SSH الخاصة بك.
3.1 حظر تسجيل الدخول كمستخدم root
في بعض إعدادات Ubuntu الافتراضية، قد يكون تسجيل الدخول كمستخدم root
مفعلًا، وهذا يمثل خطراً أمنياً كبيراً لأن حساب root يمتلك صلاحيات كاملة. من الأفضل تعطيل تسجيل الدخول المباشر بالـ root واستخدام حساب مستخدم عادي مع صلاحيات sudo.
3.1.1 خطوات الإعداد
- حرّر ملف إعدادات SSH
/etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
- ابحث عن السطر
PermitRootLogin
وقم بتغييره إلىno
:
PermitRootLogin no
- احفظ الملف وأعد تشغيل خدمة SSH:
sudo systemctl restart ssh
- تحقق من التغيير بالأمر التالي:
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 على عدة منافذ
- حرّر ملف
/etc/ssh/sshd_config
Port 22
Port 2200
- أعد تشغيل خدمة SSH
sudo systemctl restart ssh
- اسمح بالمنفذ الجديد في 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 إذا كان لديك وصول فعلي للخادم
- شغّل النظام في وضع المستخدم الأحادي (Single User Mode) من قائمة GRUB
- أعد تعيين كلمة المرور:
passwd اسم_المستخدم
- أعد تشغيل الجهاز
6.2.2 إذا لم يكن لديك وصول فعلي (VPS/Cloud)
- استخدم ميزة الكونسول في مزود الخدمة السحابية (Cloud Console)
- يمكنك أيضًا تفعيل تسجيل الدخول عبر المفتاح العام
6.3 كيف أستخدم SSH في Windows؟
6.3.1 باستخدام PowerShell
ssh اسم_المستخدم@عنوان_IP_الخادم
6.3.2 باستخدام PuTTY
- نزّل وثبّت PuTTY
- أدخل عنوان IP في
Host Name (or IP address)
- حدد
SSH
واضغطOpen
- أدخل اسم المستخدم وكلمة المرور للاتصال
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 بالوصول إلى الخوادم وأجهزة الكمبيوتر والتحكم فيها عن بُعد بأمان. يشرح هذا المقال[…]