SSHD(8)

الاسم
sshd - برنامج خفي لـ OpenSSH

موجز
sshd [-46DdeGiqTtV] [-C connection_spec] [-c host_certificate_file] [-E log_file] [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]

الوصف
sshd (برنامج خفي لـ OpenSSH) هو البرنامج الخفي لـ ssh(1). يوفر اتصالات مشفرة آمنة بين مضيفين غير موثوقين عبر شبكة غير آمنة.

يستمع sshd للاتصالات من العملاء. يُبدأ عادةً عند الإقلاع من /etc/rc. يُنشئ برنامجًا خفيًا جديدًا لكل اتصال وارد. تتعامل البرامج الخفية المنشأة مع تبادل المفاتيح والتشفير والاستيثاق وتنفيذ الأوامر وتبادل البيانات.

يمكن تهيئة sshd باستخدام خيارات سطر الأوامر أو ملف تهيئة (مبدئيًا sshd_config(5)) ؛ تتجاوز خيارات سطر الأوامر القيم المحددة في ملف التهيئة. يعيد sshd قراءة ملف التهيئة الخاص به عند استقبال إشارة تعليق، SIGHUP ، عن طريق تنفيذ نفسه بالاسم والخيارات التي بدأ بها، مثل /usr/sbin/sshd.

الخيارات هي كما يلي:

-4  يجبر sshd على استخدام عناوين IPv4 فقط.

-6  يجبر sshd على استخدام عناوين IPv6 فقط.

-C connection_spec
    حدد معلمات الاتصال لاستخدامها في وضع الاختبار الممتد -T. إذا تم توفيرها، تُطبق أي توجيهات Match في ملف التهيئة التي قد تنطبق قبل كتابة التهيئة إلى المخرج القياسي. تُقدم معلمات الاتصال كأزواج كلمة=قيمة ويمكن تقديمها بأي ترتيب، إما مع خيارات -C متعددة أو كقائمة مفصولة بفواصل. الكلمات هي “addr” و “user” و “host” و “laddr” و “lport” و “rdomain” وتتوافق مع عنوان المصدر والمستخدم واسم المضيف المصدر المحلل والعنوان المحلي ورقم المنفذ المحلي ومجال التوجيه على التوالي. بالإضافة إلى ذلك، يمكن تحديد علامة “invalid-user” (التي لا تأخذ وسيطة قيمة) لمحاكاة اتصال من اسم مستخدم غير معروف.

-c host_certificate_file
    يحدد مسارًا إلى ملف شهادة لتحديد هوية sshd أثناء تبادل المفاتيح. يجب أن يتطابق ملف الشهادة مع ملف مفتاح مضيف محدد باستخدام الخيار -h أو توجيه التهيئة HostKey.

-D  عند تحديد هذا الخيار، لا ينفصل sshd ولا يصبح برنامجًا خفيًا. يسمح هذا بمراقبة سهلة لـ sshd.

-d  وضع التصحيح. يرسل الخادم مخرجات تصحيح مفصلة إلى الخطأ القياسي، ولا يضع نفسه في الخلفية. لن يقوم الخادم أيضًا بـ fork(2) وسيعالج اتصالًا واحدًا فقط. هذا الخيار مخصص فقط لتصحيح أخطاء الخادم. تزيد خيارات -d المتعددة من مستوى التصحيح. الحد الأقصى هو 3.

-E log_file
    ألحق سجلات التصحيح بـ log_file بدلاً من سجل النظام.

-e  اكتب سجلات التصحيح إلى الخطأ القياسي بدلاً من سجل النظام.

-f config_file
    يحدد اسم ملف التهيئة. المبدئي هو /etc/ssh/sshd_config. يرفض sshd البدء إذا لم يكن هناك ملف تهيئة.

-G  حلل واطبع ملف التهيئة. تحقق من صحة ملف التهيئة، وأخرج التهيئة الفعلية إلى stdout ثم اخرج. اختياريًا، يمكن تطبيق قواعد Match عن طريق تحديد معلمات الاتصال باستخدام خيار -C واحد أو أكثر.

-g login_grace_time
    يعطي وقت السماح للعملاء للاستيثاق بأنفسهم (مبدئي 120 ثانية). إذا فشل العميل في استيثاق المستخدم خلال هذا العدد من الثواني، يفصل الخادم الاتصال ويخرج. تشير القيمة صفر إلى عدم وجود حد.

-h host_key_file
    يحدد ملفًا يُقرأ منه مفتاح المضيف. يجب إعطاء هذا الخيار إذا لم يُشغّل sshd كجذر (لأن ملفات مفاتيح المضيف العادية غير قابلة للقراءة عادةً لأي شخص غير الجذر). المبدئي هو /etc/ssh/ssh_host_ecdsa_key و /etc/ssh/ssh_host_ed25519_key و /etc/ssh/ssh_host_rsa_key. من الممكن وجود عدة ملفات مفاتيح مضيف لخوارزميات مفاتيح المضيف المختلفة.

-i  يحدد أن sshd يُشغّل من inetd(8).

-o خيار
    يمكن استخدامه لإعطاء خيارات بالتنسيق المستخدم في ملف الإعدادات. هذا مفيد لتحديد خيارات لا يوجد لها علم سطر أوامر منفصل. للتفاصيل الكاملة عن الخيارات وقيمها، انظر sshd_config(5).

-p port
    يحدد المنفذ الذي يستمع عليه الخادم للاتصالات (المبدئي 22). يُسمح بخيارات منفذ متعددة. تُتجاهل المنافذ المحددة في ملف الإعدادات بخيار Port عند تحديد منفذ في سطر الأوامر. المنافذ المحددة باستخدام خيار ListenAddress تتجاوز منافذ سطر الأوامر.

-q  وضع هادئ. لا يُرسل شيء إلى سجل النظام. عادةً يُسجل بداية واستيثاق وإنهاء كل اتصال.

-T  وضع اختبار موسع. يتحقق من صحة ملف الإعدادات، ويُخرج الإعدادات الفعلية إلى stdout ثم يخرج. اختياريًا، يمكن تطبيق قواعد Match بتحديد معاملات الاتصال باستخدام خيار -C واحد أو أكثر. هذا مشابه لعلم -G ، لكنه يتضمن الاختبار الإضافي الذي يؤديه علم -t.

-t  وضع اختبار. يتحقق فقط من صحة ملف الإعدادات وسلامة المفاتيح. هذا مفيد لتحديث sshd بشكل موثوق حيث قد تتغير خيارات الإعدادات.

-u len
    يُستخدم هذا الخيار لتحديد حجم الحقل في بنية utmp الذي يحمل اسم المضيف البعيد. إذا كان اسم المضيف المُحلّ أطول من len ، فستُستخدم القيمة العشرية المنقوطة بدلاً من ذلك. هذا يسمح للمضيفات ذات أسماء المضيف الطويلة جدًا التي تفيض هذا الحقل بأن تظل محددة بشكل فريد. تحديد -u0 يشير إلى أنه يجب وضع العناوين العشرية المنقوطة فقط في ملف utmp. يمكن أيضًا استخدام -u0 لمنع sshd من إجراء طلبات DNS ما لم يتطلبها آلية الاستيثاق أو الإعدادات. آليات الاستيثاق التي قد تتطلب DNS تشمل HostbasedAuthentication واستخدام خيار from="pattern-list" في ملف مفتاح. خيارات الإعدادات التي تتطلب DNS تشمل استخدام نمط USER@HOST في AllowUsers أو DenyUsers.

-V  اعرض رقم الإصدار واخرج.

الاستيثاق
يدعم برنامج خفي SSH الخاص بـ OpenSSH بروتوكول SSH 2 فقط. لكل مضيف مفتاح خاص بالمضيف، يُستخدم لتحديد المضيف. عندما يتصل عميل، يستجيب البرنامج الخفي بمفتاح المضيف العام. يقارن العميل مفتاح المضيف بقاعدة بياناته الخاصة للتحقق من أنه لم يتغير. تُوفر السرية الأمامية من خلال اتفاق مفتاح Diffie-Hellman. ينتج عن اتفاق المفتاح هذا مفتاح جلسة مشترك. يُشفّر باقي الجلسة باستخدام تشفير متماثل. يختار العميل خوارزمية التشفير لاستخدامها من تلك التي يقدمها الخادم. بالإضافة إلى ذلك، تُوفر سلامة الجلسة من خلال رمز مصادقة رسالة تشفيري (MAC).

أخيرًا، يدخل الخادم والعميل في حوار استيثاق. يحاول العميل استيثاق نفسه باستخدام الاستيثاق القائم على المضيف، أو استيثاق المفتاح العام، أو استيثاق التحدي والاستجابة، أو استيثاق كلمة المرور.

بغض النظر عن نوع الاستيثاق، يُفحص الحساب لضمان أنه قابل للوصول. الحساب غير قابل للوصول إذا كان مقفلاً، أو مُدرجًا في DenyUsers أو مجموعته مُدرجة في DenyGroups. تعريف الحساب المقفل يعتمد على النظام. بعض المنصات لها قاعدة بيانات حسابات خاصة بها (مثل AIX) وبعضها يُعدّل حقل passwd ( ‘*LK*’ على Solaris وUnixWare، ‘*’ على HP-UX، يحتوي على ‘Nologin’ على Tru64، بادئة ‘*LOCKED*’ على FreeBSD وبادئة ‘’! على معظم أنظمة Linux). إذا كان هناك متطلب لتعطيل استيثاق كلمة المرور للحساب مع السماح بالمفتاح العام، فيجب تعيين حقل passwd إلى شيء آخر غير هذه القيم (مثل ‘NP’ أو ‘*NP*’).

إذا استوثق العميل بنجاح، يُدخل حوار لتحضير الجلسة. في هذا الوقت، قد يطلب العميل أشياء مثل تخصيص pseudo-tty، أو إعادة توجيه اتصالات X11، أو إعادة توجيه اتصالات TCP، أو إعادة توجيه اتصال وكيل الاستيثاق عبر القناة الآمنة.

بعد ذلك، يطلب العميل إما شل تفاعلي أو تنفيذ أمر غير تفاعلي، والذي سينفذه sshd عبر شل المستخدم باستخدام خياره -c. ثم يدخل الطرفان وضع الجلسة. في هذا الوضع، قد يرسل أي طرف بيانات في أي وقت، وتُعاد توجيه هذه البيانات من/إلى الشل أو الأمر على جانب الخادم، وطرفية المستخدم على جانب العميل.

عندما ينتهي برنامج المستخدم وتُغلق جميع اتصالات X11 المُعاد توجيهها والاتصالات الأخرى، يرسل الخادم حالة خروج الأمر إلى العميل، ويخرج كلا الطرفين.

عملية تسجيل الدخول
عندما يسجل مستخدم الدخول بنجاح، يقوم sshd بما يلي:

1.  إذا كان تسجيل الدخول على tty، ولم يُحدد أمر، يطبع وقت آخر تسجيل دخول و /etc/motd (ما لم يُمنع في ملف الإعدادات أو بواسطة ~/.hushlogin ؛ انظر قسم FILES).

2.  إذا كان تسجيل الدخول على tty، يسجل وقت تسجيل الدخول.

3.  يتحقق من /etc/nologin ؛ إذا كان موجودًا، يطبع محتوياته ويخرج (إلا إذا كان المستخدم هو الجذر).

4.  يتحول للتشغيل بصلاحيات المستخدم العادية.

5.  يُعد البيئة الأساسية.

6.  يقرأ الملف ~/.ssh/environment ، إذا كان موجودًا، ويُسمح للمستخدمين بتغيير بيئتهم. انظر خيار PermitUserEnvironment في sshd_config(5).

7.  ينتقل إلى دليل المستخدم الرئيسي.

8.  إذا كان ~/.ssh/rc موجودًا وخيار PermitUserRC في sshd_config(5) مُعيّنًا، يُشغّله؛ وإلا إذا كان /etc/ssh/sshrc موجودًا، يُشغّله؛ وإلا يُشغّل xauth(1). تُعطى ملفات “rc” بروتوكول الاستيثاق X11 والكوكي في المدخل المعياري. انظر SSHRC أدناه.

9.  يشغّل شِل المستخدم أو أمره. تُشغّل جميع الأوامر تحت شِل تسجيل دخول المستخدم كما هو محدد في قاعدة بيانات كلمات السر النظامية.

SSHRC
إذا كان الملف ~/.ssh/rc موجودًا، يُشغّله sh(1) بعد قراءة ملفات البيئة ولكن قبل بدء شِل المستخدم أو أمره. يجب ألا يُنتج أي مخرجات على stdout؛ بل يجب استخدام stderr بدلاً من ذلك. إذا كان إعادة التوجيه X11 قيد الاستخدام، سيستقبل زوج "proto cookie" في مدخله المعياري (و DISPLAY في بيئته). يجب على النص البرمجي استدعاء xauth(1) لأن sshd لن يشغّل xauth آليًا لإضافة كوكيز X11.

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

سيحتوي هذا الملف غالبًا على بعض كود التهيئة متبوعًا بشيء مشابه لـ:

    if read proto cookie && [ -n "$DISPLAY" ]; then
    	if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
    		# X11UseLocalhost=yes
    		echo add unix:`echo $DISPLAY |
    		    cut -c11-` $proto $cookie
    	else
    		# X11UseLocalhost=no
    		echo add $DISPLAY $proto $cookie
    	fi | xauth -q -
    fi

إذا لم يكن هذا الملف موجودًا، يُشغّل /etc/ssh/sshrc ، وإذا لم يكن ذلك موجودًا أيضًا، يُستخدم xauth لإضافة الكوكي.

تنسيق ملف AUTHORIZED_KEYS
يحدد AuthorizedKeysFile الملفات التي تحتوي على المفاتيح العمومية للاستيثاق بالمفتاح العمومي؛ إذا لم يُحدد هذا الخيار، فالمبدئي هو ~/.ssh/authorized_keys و ~/.ssh/authorized_keys2. يحتوي كل سطر من الملف على مفتاح واحد (تُتجاهل الأسطر الفارغة والأسطر التي تبدأ بـ ‘#’ كتعليقات). تتكون المفاتيح العمومية من الحقول التالية المفصولة بمسافات: الخيارات، نوع المفتاح، المفتاح المشفر بـ base64، التعليق. حقل الخيارات اختياري. أنواع المفاتيح المدعومة هي:

sk-ecdsa-sha2-nistp256@openssh.com
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
sk-ssh-ed25519@openssh.com
ssh-ed25519
ssh-rsa

حقل التعليق لا يُستخدم لأي غرض (لكنه قد يكون مناسبًا للمستخدم لتحديد المفتاح).

لاحظ أن الأسطر في هذا الملف يمكن أن يصل طولها إلى عدة مئات من البايتات (بسبب حجم ترميز المفتاح العام) حتى حد أقصى يبلغ 8 كيلوبايت، مما يسمح بمفاتيح RSA يصل حجمها إلى 16 كيلوبت. لا ترغب في كتابتها يدويًا؛ بدلاً من ذلك، انسخ ملف id_ecdsa.pub أو id_ecdsa_sk.pub أو id_ed25519.pub أو id_ed25519_sk.pub أو id_rsa.pub وقم بتحريره.

يفرض sshd حدًا أدنى لحجم معامل مفتاح RSA يبلغ 1024 بت.

تتكون الخيارات (إن وجدت) من مواصفات خيارات مفصولة بفاصلة. لا يُسمح بمسافات، إلا داخل علامات الاقتباس المزدوجة. مواصفات الخيارات التالية مدعومة (لاحظ أن الكلمات المفتاحية للخيارات غير حساسة لحالة الأحرف):

agent-forwarding
    قم بتمكين إعادة توجيه وكيل الاستيثاق الذي تم تعطيله سابقًا بواسطة خيار restrict.

cert-authority
    يحدد أن المفتاح المدرج هو سلطة تصديق (CA) موثوق بها للتحقق من صحة الشهادات الموقعة لاستيثاق المستخدم.

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

command="command"
    يحدد أن الأمر يُنفّذ كلما تم استخدام هذا المفتاح للاستيثاق. يتم تجاهل الأمر المقدم من المستخدم (إن وجد). يُشغّل الأمر على pty إذا طلب العميل pty؛ وإلا يُشغّل بدون tty. إذا كانت هناك حاجة إلى قناة نظيفة 8 بت، يجب عدم طلب pty أو يجب تحديد no-pty. يمكن تضمين علامة اقتباس في الأمر عن طريق وضع شرطة مائلة عكسية قبلها.

    قد يكون هذا الخيار مفيدًا لتقييد مفاتيح عامة معينة لأداء عملية محددة فقط. مثال على ذلك مفتاح يسمح بالنسخ الاحتياطي عن بُعد فقط. لاحظ أن العميل قد يحدد إعادة توجيه TCP و/أو X11 ما لم يتم منعها صراحةً، على سبيل المثال باستخدام خيار المفتاح restrict.

    الأمر المقدم أصلاً من العميل متاح في متغير البيئة SSH_ORIGINAL_COMMAND. لاحظ أن هذا الخيار ينطبق على تنفيذ الصدفة أو الأمر أو النظام الفرعي. لاحظ أيضًا أن هذا الأمر قد يتم تجاوزه بواسطة توجيه ForceCommand من sshd_config(5).

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

environment="NAME=value"
    يحدد أن السلسلة ستُضاف إلى البيئة عند تسجيل الدخول باستخدام هذا المفتاح. متغيرات البيئة المحددة بهذه الطريقة تتجاوز قيم البيئة المبدئية الأخرى. يُسمح بخيارات متعددة من هذا النوع. معالجة البيئة معطلة مبدئيًا ويتم التحكم فيها عبر خيار PermitUserEnvironment.

expiry-time="timespec"
    يحدد وقتًا لن يُقبل المفتاح بعده. يمكن تحديد الوقت كتاريخ YYYYMMDD[Z] أو وقت YYYYMMDDHHMM[SS][Z]. سيتم تفسير التواريخ والأوقات في المنطقة الزمنية للنظام ما لم تكن متبوعة بحرف Z، وفي هذه الحالة سيتم تفسيرها في المنطقة الزمنية UTC.

from="pattern-list"
    يحدد أنه بالإضافة إلى استيثاق المفتاح العام، يجب أن يكون الاسم القانوني للمضيف البعيد أو عنوان IP الخاص به موجودًا في قائمة الأنماط المفصولة بفواصل. راجع PATTERNS في ssh_config(5) لمزيد من المعلومات حول الأنماط.

    بالإضافة إلى مطابقة أحرف البدل التي قد تُطبق على أسماء المضيفين أو العناوين، قد يطابق مقطع from عناوين IP باستخدام تدوين عنوان CIDR/طول القناع.

    الغرض من هذا الخيار هو زيادة الأمان اختياريًا: الاستيثاق بالمفتاح العام بذاته لا يثق بالشبكة أو خوادم الأسماء أو أي شيء (سوى المفتاح)؛ ولكن، إذا سرق شخص ما المفتاح بطريقة ما، فإن المفتاح يسمح للمتسلل بتسجيل الدخول من أي مكان في العالم. هذا الخيار الإضافي يجعل استخدام المفتاح المسروق أكثر صعوبة (يجب اختراق خوادم الأسماء و/أو الموجهات بالإضافة إلى المفتاح فقط).

no-agent-forwarding
    يمنع إعادة توجيه وكيل الاستيثاق عند استخدام هذا المفتاح للاستيثاق.

no-port-forwarding
    يمنع إعادة توجيه TCP عند استخدام هذا المفتاح للاستيثاق. أي طلبات إعادة توجيه منفذ من العميل سترجع خطأ. قد يُستخدم هذا، على سبيل المثال، بالاقتران مع خيار command.

no-pty
    يمنع تخصيص tty (سيفشل طلب تخصيص pty).

no-user-rc
    يعطل تنفيذ ~/.ssh/rc.

no-X11-forwarding
    يمنع إعادة توجيه X11 عند استخدام هذا المفتاح للاستيثاق. أي طلبات إعادة توجيه X11 من العميل سترجع خطأ.

permitlisten="[host:]port"
    يحدد إعادة توجيه المنفذ البعيد مع خيار ssh(1) -R بحيث قد يستمع فقط على المضيف المحدد (اختياري) والمنفذ. يمكن تحديد عناوين IPv6 بإحاطة العنوان بأقواس مربعة. قد تُطبق خيارات permitlisten متعددة مفصولة بفواصل. قد تتضمن أسماء المضيفين أحرف بدل كما هو موصوف في قسم PATTERNS في ssh_config(5). مواصفات منفذ * تطابق أي منفذ. لاحظ أن إعداد GatewayPorts قد يحدد عناوين الاستماع أكثر. لاحظ أن ssh(1) سيرسل اسم مضيف “localhost” إذا لم يُحدد مضيف استماع عند طلب إعادة التوجيه، وأن هذا الاسم يُعالج بشكل مختلف عن عناوين localhost الصريحة “127.0.0.1” و “::1”.

permitopen="host:port"
    يحدد إعادة توجيه المنفذ المحلي مع خيار ssh(1) -L بحيث قد يتصل فقط بالمضيف والمنفذ المحددين. يمكن تحديد عناوين IPv6 بإحاطة العنوان بأقواس مربعة. قد تُطبق خيارات permitopen متعددة مفصولة بفواصل. لا يُجرى مطابقة نمط أو بحث اسم على أسماء المضيفين المحددة، يجب أن تكون أسماء مضيفين و/أو عناوين حرفية. مواصفات منفذ * تطابق أي منفذ.

port-forwarding
    يفعل إعادة توجيه المنفذ المعطل سابقًا بواسطة خيار restrict.

principals="principals"
    في سطر cert-authority ، يحدد المبادئ المسموح بها لاستيثاق الشهادة كقائمة مفصولة بفواصل. يجب أن يظهر اسم واحد على الأقل من القائمة في قائمة مبادئ الشهادة لقبول الشهادة. يُتجاهل هذا الخيار للمفاتيح غير الموسومة كموقّعي شهادات موثوقين باستخدام خيار cert-authority.

pty يسمح بتخصيص tty الذي تم تعطيله سابقًا بواسطة خيار restrict.

no-touch-required
    لا يتطلب إثبات وجود المستخدم للتوقيعات المصنوعة باستخدام هذا المفتاح. هذا الخيار منطقي فقط لخوارزميات المصادقة FIDO ecdsa-sk و ed25519-sk.

verify-required
    يتطلب أن تشهد التوقيعات المصنوعة باستخدام هذا المفتاح بأنها تحققت من المستخدم، مثلاً عبر رقم PIN. هذا الخيار منطقي فقط لخوارزميات المصادقة FIDO ecdsa-sk و ed25519-sk.

restrict
    يفعّل جميع القيود، أي تعطيل إعادة توجيه المنفذ والوكيل وX11، بالإضافة إلى تعطيل تخصيص PTY وتنفيذ ~/.ssh/rc. إذا أُضيفت أي قدرات تقييد مستقبلية إلى ملفات authorized_keys، فسيتم تضمينها في هذه المجموعة.

tunnel="n"
    يفرض جهاز tun(4) على الخادم. بدون هذا الخيار، سيُستخدم الجهاز التالي المتاح إذا طلب العميل نفقًا.

user-rc
    يفعّل تنفيذ ~/.ssh/rc الذي تم تعطيله سابقًا بواسطة خيار restrict.

X11-forwarding
    يسمح بإعادة توجيه X11 الذي تم تعطيله سابقًا بواسطة خيار restrict.

ملف authorized_keys مثال:

    # يُسمح بكتابة التعليقات في بداية السطر. ويُسمح بوجود أسطر فارغة.
    # مفتاح عادي، بدون قيود
    ssh-rsa ...
    # أمر إجباري، تعطيل PTY وجميع عمليات إعادة التوجيه
    restrict,command=”dump /home“ ssh-rsa ...
    # تقييد وجهات إعادة التوجيه ssh -L
    permitopen="192.0.2.1:80",permitopen=”192.0.2.2:25“ ssh-rsa ...
    # تقييد مستمعي إعادة توجيه ssh -R
    permitlisten="localhost:8080",permitlisten=”[::1]:22000“ ssh-rsa ...
    # تكوين إعادة توجيه النفق
    tunnel="0",command=”sh /etc/netstart tun0“ ssh-rsa ...
    # تجاوز التقييد للسماح بتخصيص PTY
    restrict,pty,command=”nethack“ ssh-rsa ...
    # السماح بمفتاح FIDO دون الحاجة إلى اللمس
    no-touch-required sk-ecdsa-sha2-nistp256@openssh.com ...
    # طلب التحقق من المستخدم (مثل PIN أو المقاييس الحيوية) لمفتاح FIDO
    verify-required sk-ecdsa-sha2-nistp256@openssh.com ...
    # الثقة بمفتاح CA، والسماح بـ FIDO بدون لمس إذا طُلب ذلك في الشهادة
    cert-authority,no-touch-required,principals=”user_a“ ssh-rsa ...

تنسيق ملف SSH_KNOWN_HOSTS
تحتوي ملفات /etc/ssh/ssh_known_hosts و ~/.ssh/known_hosts على المفاتيح العامة للمضيفين لجميع المضيفين المعروفين. يجب إعداد الملف العام بواسطة المسؤول (اختياري)، ويُحتفظ بالملف الخاص بالمستخدم آليًا: كلما اتصل المستخدم بمضيف غير معروف، يُضاف مفتاحه إلى الملف الخاص بالمستخدم.

يحتوي كل سطر في هذه الملفات على الحقول التالية: علامة (اختيارية)، أسماء المضيفين، نوع المفتاح، مفتاح مشفر بـ base64، تعليق. تُفصل الحقول بمسافات.

العلامة اختيارية، ولكن إذا كانت موجودة فيجب أن تكون إما “@cert-authority” للإشارة إلى أن السطر يحتوي على مفتاح هيئة تصديق (CA)، أو “@revoked” للإشارة إلى أن المفتاح الموجود في السطر مُلغى ويجب عدم قبوله أبدًا. يجب استخدام علامة واحدة فقط في سطر المفتاح.

أسماء المضيفين هي قائمة مفصولة بفواصل من الأنماط (‘*’ و ‘’? تعمل كحروف بدل)؛ يُطابق كل نمط بدوره مع اسم المضيف. عندما يُصادق sshd على عميل، مثل عند استخدام HostbasedAuthentication ، سيكون هذا هو اسم المضيف القانوني للعميل. عندما يُصادق ssh(1) على خادم، سيكون هذا هو اسم المضيف الذي قدمه المستخدم، أو قيمة ssh(1) HostkeyAlias إذا تم تحديدها، أو اسم المضيف القانوني للخادم إذا تم استخدام خيار ssh(1) CanonicalizeHostname.

قد يسبق النمط أيضًا ‘’! للإشارة إلى النفي: إذا تطابق اسم المضيف مع نمط منفي، فلن يُقبل (بواسطة ذلك السطر) حتى لو تطابق مع نمط آخر في السطر. قد يُحاط اسم المضيف أو العنوان اختياريًا بين قوسين ‘[’ و ‘’] ثم يتبعه ‘’: ورقم منفذ غير قياسي.

بدلاً من ذلك، يمكن تخزين أسماء المضيفين بصيغة مُجزّأة تخفي أسماء المضيفين وعناوينهم في حال تم الكشف عن محتويات الملف. تبدأ أسماء المضيفين المُجزّأة بحرف ‘|’. يُسمح بظهور اسم مضيف مُجزّأ واحد فقط في كل سطر، ولا يجوز تطبيق أي من عوامل النفي أو أحرف البدل المذكورة أعلاه.

يتم أخذ نوع المفتاح والمفتاح المُرمّز بـ base64 مباشرة من مفتاح المضيف؛ يمكن الحصول عليهما، على سبيل المثال، من /etc/ssh/ssh_host_rsa_key.pub. حقل التعليق الاختياري يمتد إلى نهاية السطر، ولا يُستخدم.

يتم تجاهل الأسطر التي تبدأ بـ ‘#’ والأسطر الفارغة كتعليقات.

عند إجراء استيثاق المضيف، يُقبل الاستيثاق إذا احتوى أي سطر مطابق على المفتاح الصحيح؛ إما مفتاح يطابق تماماً، أو إذا قدم الخادم شهادة للاستيثاق، مفتاح هيئة التصديق التي وقّعت الشهادة. لكي يُوثق بمفتاح كهيئة تصديق، يجب أن يستخدم العلامة “@cert-authority” الموصوفة أعلاه.

يوفر ملف المضيفين المعروفين أيضاً وسيلة لتعليم المفاتيح كملغاة، على سبيل المثال عندما يُعرف أن المفتاح الخاص المرتبط قد سُرق. تُحدد المفاتيح الملغاة بتضمين العلامة “@revoked” في بداية سطر المفتاح، ولا تُقبل أبداً للاستيثاق أو كهيئات تصديق، بل ستُنتج تحذيراً من ssh(1) عند مواجهتها.

يُسمح (ولكن لا يُوصى) بوجود عدة أسطر أو مفاتيح مضيف مختلفة لنفس الأسماء. سيحدث هذا حتماً عند وضع الصيغ المختصرة لأسماء المضيفين من نطاقات مختلفة في الملف. من الممكن أن تحتوي الملفات على معلومات متضاربة؛ يُقبل الاستيثاق إذا أمكن العثور على معلومات صالحة من أي من الملفين.

لاحظ أن الأسطر في هذه الملفات يبلغ طولها عادةً مئات الأحرف، وبالتأكيد لا ترغب في كتابة مفاتيح المضيف يدوياً. بدلاً من ذلك، قم بتوليدها بواسطة سكريبت، أو ssh-keyscan(1) ، أو بأخذ مثلاً /etc/ssh/ssh_host_rsa_key.pub وإضافة أسماء المضيفين في المقدمة. يقدم ssh-keygen(1) أيضاً بعض التحرير الآلي الأساسي لـ ~/.ssh/known_hosts بما في ذلك إزالة المضيفين المطابقين لاسم مضيف وتحويل جميع أسماء المضيفين إلى تمثيلاتها المُجزّأة.

مثال لملف ssh_known_hosts:

    # يُسمح بإدراج تعليقات في بداية السطر
    cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
    # اسم مضيف مُشفَّر
    |1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
    AAAA1234.....=
    # مفتاح تم إلغاؤه
    @revoked * ssh-rsa AAAAB5W...
    # مفتاح CA، مقبول لأي مضيف في *.mydomain.com أو *.mydomain.org
    @cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...

الملفات
~/.hushlogin
    يُستخدم هذا الملف لمنع طباعة وقت آخر تسجيل دخول و /etc/motd ، إذا كانا PrintLastLog و PrintMotd ، على التوالي، مُفعّلين. لا يمنع طباعة اللافتة المحددة بواسطة Banner.

~/.rhosts
    يُستخدم هذا الملف للاستيثاق المعتمد على المضيف (انظر ssh(1) لمزيد من المعلومات). على بعض الأجهزة، قد يحتاج هذا الملف أن يكون قابلاً للقراءة للجميع إذا كان دليل المستخدم الرئيسي على قسم NFS، لأن sshd يقرؤه كجذر. بالإضافة إلى ذلك، يجب أن يكون هذا الملف مملوكاً للمستخدم، ويجب ألا يكون لديه أذونات كتابة لأي شخص آخر. الإذن الموصى به لمعظم الأجهزة هو قراءة/كتابة للمستخدم، وغير قابل للوصول من قبل الآخرين.

~/.shosts
    يستخدم هذا الملف بنفس طريقة .rhosts تمامًا، ولكنه يسمح بالاستيثاق القائم على المضيف دون السماح بتسجيل الدخول باستخدام rlogin/rsh.

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

~/.ssh/authorized_keys
    يسرد المفاتيح العامة (ECDSA, Ed25519, RSA) التي يمكن استخدامها لتسجيل الدخول كهذا المستخدم. تنسيق هذا الملف موصوف أعلاه. محتوى الملف ليس شديد الحساسية، لكن الأذونات الموصى بها هي قراءة/كتابة للمستخدم، وغير قابلة للوصول من قبل الآخرين.

    إذا كان هذا الملف، أو دليل ~/.ssh ، أو دليل المستخدم الرئيسي قابلاً للكتابة من قبل مستخدمين آخرين، فقد يتم تعديل الملف أو استبداله من قبل مستخدمين غير مصرح لهم. في هذه الحالة، لن يسمح sshd باستخدامه ما لم يتم تعيين خيار StrictModes إلى “no”.

~/.ssh/environment
    يُقرأ هذا الملف في البيئة عند تسجيل الدخول (إذا كان موجوداً). يمكن أن يحتوي فقط على أسطر فارغة، وأسطر تعليقات (تبدأ بـ ‘#’) ، وأسطر تعيين بالصيغة name=value. يجب أن يكون الملف قابلاً للكتابة فقط من قبل المستخدم؛ ولا يحتاج أن يكون قابلاً للقراءة من قبل أي شخص آخر. معالجة البيئة معطلة افتراضياً ويتم التحكم بها عبر خيار PermitUserEnvironment.

~/.ssh/known_hosts
    يحتوي على قائمة بمفاتيح المضيف لجميع المضيفين الذين سجل المستخدم الدخول إليهم والذين ليسوا موجودين بالفعل في القائمة الشاملة للنظام لمفاتيح المضيف المعروفة. تنسيق هذا الملف موصوف أعلاه. يجب أن يكون هذا الملف قابلاً للكتابة فقط من قبل الجذر/المالك، ويمكن أن يكون قابلاً للقراءة للجميع، لكن ليس من الضروري.

~/.ssh/rc
    يحتوي على إجراءات تهيئة يتم تشغيلها قبل أن يصبح دليل المستخدم الرئيسي قابلاً للوصول. يجب أن يكون هذا الملف قابلاً للكتابة فقط من قبل المستخدم، ولا يحتاج أن يكون قابلاً للقراءة من قبل أي شخص آخر.

/etc/hosts.equiv
    هذا الملف مخصص للاستيثاق المعتمد على المضيف (انظر ssh(1)). يجب أن يكون قابلاً للكتابة فقط من قبل الجذر.

/etc/ssh/moduli
    يحتوي على مجموعات Diffie-Hellman المستخدمة لطريقة تبادل المفاتيح "Diffie-Hellman Group Exchange". تنسيق الملف موصوف في moduli(5). إذا لم يتم العثور على مجموعات قابلة للاستخدام في هذا الملف، فسيتم استخدام مجموعات داخلية ثابتة.

/etc/motd
    انظر motd(5).

/etc/nologin
    إذا وُجد هذا الملف، يرفض sshd السماح لأي شخص باستثناء الجذر بتسجيل الدخول. تُعرض محتويات الملف لأي شخص يحاول تسجيل الدخول، وتُرفض الاتصالات غير الجذرية. يجب أن يكون الملف قابلًا للقراءة عالميًا.

/etc/ssh/shosts.equiv
    يستخدم هذا الملف بنفس طريقة hosts.equiv تمامًا، ولكنه يسمح بالاستيثاق القائم على المضيف دون السماح بتسجيل الدخول باستخدام rlogin/rsh.

/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_rsa_key
    تحتوي هذه الملفات على الأجزاء الخاصة من مفاتيح المضيف. يجب أن تكون هذه الملفات مملوكة للجذر فقط، وقابلة للقراءة من قبل الجذر فقط، وغير قابلة للوصول للآخرين. لاحظ أن sshd لا يبدأ إذا كانت هذه الملفات قابلة للوصول للمجموعة/العالم.

/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
    تحتوي هذه الملفات على الأجزاء العامة من مفاتيح المضيف. يجب أن تكون هذه الملفات قابلة للقراءة عالميًا ولكن قابلة للكتابة فقط من قبل الجذر. يجب أن تتطابق محتوياتها مع الأجزاء الخاصة المقابلة. لا تُستخدم هذه الملفات لأي شيء فعليًا؛ فهي مُقدمة لراحة المستخدم بحيث يمكن نسخ محتوياتها إلى ملفات المضيفين المعروفين. تُنشأ هذه الملفات باستخدام ssh-keygen(1).

/etc/ssh/ssh_known_hosts
    قائمة على مستوى النظام لمفاتيح المضيف المعروفة. يجب أن يُعد مسؤول النظام هذا الملف لاحتواء مفاتيح المضيف العامة لجميع الأجهزة في المؤسسة. تنسيق هذا الملف موصوف أعلاه. يجب أن يكون هذا الملف قابلاً للكتابة فقط من قبل الجذر/المالك ويجب أن يكون قابلاً للقراءة عالميًا.

/etc/ssh/sshd_config
    يحتوي على بيانات تهيئة لـ sshd. تنسيق الملف وخيارات التهيئة موصوفة في sshd_config(5).

/etc/ssh/sshrc
    مشابه لـ ~/.ssh/rc ، يمكن استخدامه لتحديد تهيئات وقت تسجيل الدخول الخاصة بالجهاز عالميًا. يجب أن يكون هذا الملف قابلاً للكتابة فقط من قبل الجذر، ويجب أن يكون قابلاً للقراءة عالميًا.

/usr/share/empty.sshd
    دليل chroot(2) المستخدم بواسطة sshd أثناء فصل الامتيازات في مرحلة ما قبل الاستيثاق. يجب ألا يحتوي الدليل على أي ملفات ويجب أن يكون مملوكًا للجذر وغير قابل للكتابة من قبل المجموعة أو العالم.

/run/sshd.pid
    يحتوي على معرف العملية لـ sshd الذي يستمع للاتصالات (إذا كانت هناك عدة برامج خفية تعمل بالتزامن لمنافذ مختلفة، يحتوي هذا على معرف العملية للبرنامج الذي بدأ أخيرًا). محتوى هذا الملف ليس حساسًا؛ يمكن أن يكون قابلاً للقراءة عالميًا.

انظر أيضًا
scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), chroot(2), login.conf(5), moduli(5), sshd_config(5), inetd(8), sftp-server(8)

المؤلفون
OpenSSH هو مشتق من الإصدار الأصلي والمجاني ssh 1.2.12 بواسطة Tatu Ylonen. أزال Aaron Campbell وBob Beck وMarkus Friedl وNiels Provos وTheo de Raadt وDug Song العديد من الأخطاء، وأعادوا إضافة ميزات أحدث وأنشأوا OpenSSH. ساهم Markus Friedl بدعم إصدارات بروتوكول SSH 1.5 و2.0. ساهم Niels Provos وMarkus Friedl بدعم فصل الامتيازات.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3: https://www.gnu.org/licenses/gpl-3.0.html أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.