مقدمة عن SSH
SSH (Secure Shell) هو بروتوكول شبكة يستخدم للاتصال الآمن بأجهزة كمبيوتر أخرى عبر شبكة غير آمنة. يوفر SSH قناة آمنة عبر شبكة غير آمنة في هندسة العميل/الخادم، وربط تطبيق العميل SSH مع خادم SSH.
نصيحة: دائماً استخدم SSH للاتصال بالخوادم البعيدة بدلاً من البروتوكولات غير الآمنة مثل Telnet. SSH يوفر تشفيراً للبيئات مما يحمي معلوماتك من التنصت.
التثبيت والإعداد
كيفية تثبيت وتكوين SSH على أنظمة التشغيل المختلفة:
Terminal
# على أنظمة Ubuntu/Debian
sudo apt update
sudo apt install openssh-server
# على أنظمة CentOS/RHEL/Fedora
sudo yum install openssh-server
# أو
sudo dnf install openssh-server
# على macOS (مثبت مسبقاً عادةً)
# إذا لم يكن مثبتاً:
brew install openssh
# تمكين وتشغيل خدمة SSH
sudo systemctl enable ssh
sudo systemctl start ssh
# التحقق من حالة الخدمة
sudo systemctl status ssh
ملاحظة: تأكد من تحديث نظامك بانتظام للحصول على أحدث إصلاحات الأمان لبروتوكول SSH.
الأوامر الأساسية
إدارة المفاتيح
أوامر متقدمة
تكوين SSH
أوامر SSH الأساسية
الأوامر الأساسية للاتصال وإدارة الجلسات عن بعد:
| الأمر | الوصف |
|---|---|
ssh <username>@<host> | الاتصال بخادم عن بعد |
ssh <username>@<host> -p <port> | الاتصال باستخدام منفذ غير افتراضي |
ssh -i <keyfile> <user>@<host> | الاتصال باستخدام مفتاح خاص |
ssh -v <user>@<host> | وضع verbose لعرض تفاصيل الاتصال |
ssh -C <user>@<host> | ضغط البيانات لتحسين الأداء على اتصالات بطيئة |
exit أو logout | إنهاء جلسة SSH |
scp <file> <user>@<host>:<path> | نسخ ملف إلى خادم بعيد |
scp <user>@<host>:<file> <path> | نسخ ملف من خادم بعيد |
sftp <user>@<host> | فتح جلسة نقل ملفات تفاعلية آمنة |
إدارة مفاتيح SSH
إنشاء وإدارة مفاتيح المصادقة لتحسين الأمان:
| الأمر | الوصف |
|---|---|
ssh-keygen | إنشاء زوج مفاتيح SSH جديدة |
ssh-keygen -t rsa -b 4096 | إنشاء مفتاح RSA بقوة 4096 بت |
ssh-keygen -t ed25519 | إنشاء مفتاح باستخدام خوارزمية Ed25519 الأكثر أماناً |
ssh-copy-id <user>@<host> | نسخ المفتاح العام إلى الخادم البعيد |
ssh-add <keyfile> | إضافة مفتاح إلى وكيل المصادقة SSH |
ssh-add -l | عرض المفاتيح المضافة إلى الوكيل |
ssh-add -D | حذف جميع المفاتيح من الوكيل |
eval $(ssh-agent) | تشغيل وكيل المصادقة SSH |
ssh -o PasswordAuthentication=no <user>@<host> | فرض استخدام المصادقة بالمفتاح فقط |
مثال: إنشاء مفتاح وإضافته إلى الخادم
Terminal
# إنشاء مفتاح جديد
ssh-keygen -t ed25519 -C "your_email@example.com"
# نسخ المفتاح إلى الخادم البعيد
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname
# الاختبار الاتصال بدون كلمة مرور
ssh user@hostname
أوامر SSH المتقدمة
تقنيات وأوامر متقدمة لتحسين سير العمل مع SSH:
| الأمر | الوصف |
|---|---|
ssh -L <local_port>:<remote_host>:<remote_port> <user>@<host> | إنشاء نفق محلي (Local Port Forwarding) |
ssh -R <remote_port>:<local_host>:<local_port> <user>@<host> | إنشاء نفق بعيد (Remote Port Forwarding) |
ssh -D <port> <user>@<host> | إنشاء وكيل SOCKS ديناميكي |
ssh -t <host1> ssh <host2> | القفز عبر مضيفين (SSH Jump) |
ssh -J <user>@<jump_host> <user>@<target_host> | استخدام مضيف قفزة (Jump Host) |
ssh <host> '<command>' | تنفيذ أمر على الخادم البعيد دون فتح جلسة تفاعلية |
rsync -avz -e ssh <local_dir> <user>@<host>:<remote_dir> | مزامنة الملفات باستخدام rsync عبر SSH |
ssh -N -L <port>:<host>:<port> <user>@<host> | إنشاء نفق بدون فتح shell |
ssh -o ConnectTimeout=10 <user>@<host> | ضبط وقت المهلة للمحاولة الاتصال |
تكوين SSH
إعدادات وتكوينات ملف ~/.ssh/config لتبسيط اتصالات SSH:
| التكوين | الوصف |
|---|---|
Host <alias> | إنشاء اسم مختصر للخادم |
HostName <hostname_or_ip> | تحديد اسم المضيف أو IP |
User <username> | تحديد اسم المستخدم |
Port <port_number> | تحديد منفذ مخصص |
IdentityFile <path_to_key> | تحديد مسار المفتاح الخاص |
ProxyJump <user>@<jump_host> | تكوين مضيف قفزة |
LocalForward <local_port> <remote_host>:<remote_port> | تكوين نقل منفذ محلي |
ServerAliveInterval 60 | إرسال إشارات حية كل 60 ثانية |
Compression yes | تمكين ضغط البيانات |
مثال: تكوين ملف ~/.ssh/config
Terminal
# مثال على تكوين SSH
Host myserver
HostName server.example.com
User myuser
Port 2222
IdentityFile ~/.ssh/myserver_key
Host production
HostName 192.168.1.100
User admin
ProxyJump jumpuser@jumphost.example.com:22
Host *
ServerAliveInterval 60
TCPKeepAlive yes
Compression yes
أمثلة عملية شائعة
مثال: الاتصال بخادم باستخدام منفذ مخصص
Terminal
ssh username@example.com -p 2222
مثال: نسخ ملف إلى خادم بعيد
Terminal
scp -P 2222 myfile.txt username@example.com:/remote/directory/
مثال: تنفيذ أمر على خادم بعيد
Terminal
ssh username@example.com 'ls -la /var/www'
مثال: إنشاء نفق آمن لخدمة ويب
Terminal
ssh -L 8080:localhost:80 username@example.com
بعد تنفيذ هذا الأمر، يمكنك الوصول إلى خدمة الويب على example.com من خلال زيارة http://localhost:8080 في متصفحك.
نصائح أمان SSH
تعطيل تسجيل الدخول بكلمة المرور: لمنع هجمات القوة الغاشمة، عطل المصادقة بكلمة المرور واستخدم المفاتيح فقط عن طريق تعيين
PasswordAuthentication no في /etc/ssh/sshd_config.
تغيير المنفذ الافتراضي: تغيير منفذ SSH الافتراضي (22) يقلل من هجمات المسح التلقائي. استخدم منفذاً أعلى من 1024 وتأكد من فتحه في جدار الحماية.
استخدم جدار حماية: قيد عناوين IP المسموح لها بالاتصال بخادم SSH باستخدام جدار الحماية. على Ubuntu، يمكن استخدام
ufw لذلك.