كتيبات سطر الأوامر

Man » دليل sshd على الإنترنت - وثائق مفصلة على الإنترنت لصفحة دليل sshd

🌍
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/init.d/ssh.

ينشئ برنامجًا فرعيًا جديدًا لكل اتصال وارد. تتعامل البرامج الفرعية مع تبادل المفاتيح والتشفير والمصادقة وتنفيذ الأوامر وتبادل البيانات.

يمكن تكوين 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      وضع التصحيح. يرسل الخادم إخراج تصحيحًا مفصلاً إلى الخطأ القياسي، ولا يضع نفسه في الخلفية. لن يقوم الخادم أيضًا بإنشاء عملية فرعية وسيعالج اتصالاً واحدًا فقط. هذا الخيار مخصص فقط لتصحيح أخطاء الخادم. تزيد خيارات -d متعددة من مستوى التصحيح. الحد الأقصى هو 3.

-E log_file
أضف سجلات التصحيح إلى ملف log_file بدلاً من سجل النظام.

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

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

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

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

-h host_key_file
يحدد ملفًا يتم قراءة مفتاح المضيف منه. يجب تقديم هذا الخيار إذا كان sshd يعمل كـ inetd (نظرًا لأن ملفات مفاتيح المضيف العادية لا يمكن قراءتها إلا من قبل المستخدم الجذر). الافتراضي هو /etc/ssh/ssh_host_ecdsa_key، و/etc/ssh/ssh_host_ed25519_key، و/etc/ssh/ssh_host_rsa_key. من الممكن أن يكون لديك ملفات مفاتيح مضيف متعددة لخوارزميات مفاتيح المضيف المختلفة.

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

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

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

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

-T
وضع اختبار موسع. تحقق من صحة ملف التكوين، وأخرج التكوين الفعلي إلى stdout ثم اخرج. اختياريًا، يمكن تطبيق قواعد المطابقة عن طريق تحديد معلمات الاتصال باستخدام خيار أو أكثر من خيارات -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      عرض رقم الإصدار والخروج.

المصادقة

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

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

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

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

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

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


عملية تسجيل الدخول

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

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

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

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

      ينتقل إلى تشغيل بصلاحيات المستخدم العادية.

      يقوم بإعداد بيئة أساسية.

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

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

      إذا كان الملف ~/.ssh/rc موجودًا وكان خيار PermitUserRC في sshd_config(5) مضبوطًا، فإنه يقوم بتشغيله؛ وإلا، إذا كان الملف /etc/ssh/sshrc موجودًا، فإنه يقوم بتشغيله؛ وإلا، فإنه يقوم بتشغيل [xauth]({filename}../../xauth)(1). يتم إعطاء ملفات "rc" بروتوكول X11 وملف تعريف الارتباط في الإدخال القياسي. انظر "SSHRC"، أدناه.

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

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، والتعليق. حقل الخيارات اختياري. أنواع المفاتيح المدعومة هي:

_
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
_
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. لاحظ أن هذا الخيار ينطبق على تنفيذ shell أو command أو subsystem. لاحظ أيضًا أنه قد يتم تجاوز هذا الأمر بواسطة توجيه 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 address/masklen.

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

no-agent-forwarding

يمنع إعادة توجيه وكيل المصادقة عند استخدام هذا المفتاح للمصادقة.

no-port-forwarding

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

no-pty

يمنع تخصيص pty (سيفشل الطلب بتخصيص 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، بالإضافة إلى تعطيل تخصيص الطرفية وتشغيل ‎~/.ssh/rc. إذا تمت إضافة أي قدرات تقييد مستقبلية إلى ملفات "authorized_keys"، فسيتم تضمينها في هذه المجموعة.

tunnel="n"

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

user-rc

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

X11-forwarding

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

مثال لملف "authorized_keys":

# التعليقات مسموح بها في بداية السطر. توجد أسطر فارغة.
# مفتاح عادي، بدون قيود
ssh-rsa ...
# أمر إجباري، تعطيل الطرفية وجميع عمليات إعادة التوجيه
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 ...
# تجاوز للقيود للسماح بتخصيص الطرفية
restrict,pty,command="nethack" ssh-rsa ...
# السماح بمفتاح FIDO دون طلب اللمس
no-touch-required _ ...
# يتطلب التحقق من المستخدم (مثل رمز PIN أو القياسات الحيوية) لمفتاح FIDO
verify-required _ ...
# الثقة في مفتاح 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]({filename}../../ssh)(1) بمصادقة خادم، سيكون هذا هو اسم المضيف الذي يحدده المستخدم، أو قيمة [ssh]({filename}../../ssh)(1) HostkeyAlias إذا تم تحديدها، أو اسم المضيف الفعلي للخادم إذا تم استخدام خيار [ssh]({filename}../../ssh)(1) CanonicalizeHostname.

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

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

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

تُعتبر الأسطر التي تبدأ بـ '#' والأسطر الفارغة تعليقات وتُتجاهل.

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

يوفر ملف المضيفين المعروفين أيضًا إمكانية وضع علامة على المفاتيح على أنها مُلغاة، على سبيل المثال، عندما يُعرف أن المفتاح الخاص المرتبط قد سُرق. يتم تحديد المفاتيح الملغاة عن طريق تضمين علامة "@revoked" في بداية سطر المفتاح، ولا يتم قبولها أبدًا للمصادقة أو كجهات إصدار شهادات، ولكن بدلاً من ذلك ستنتج تحذيرًا من [ssh]({filename}../../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...
# مفتاح هيئة التصديق، مقبول لأي مضيف في *.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.allow
/etc/hosts.deny

يتم تحديد عناصر التحكم في الوصول التي يجب أن تفرضها أداة tcp-wrappers هنا. توجد تفاصيل إضافية في hosts_access(5).

/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، يمكن استخدامه لتحديد عمليات تهيئة خاصة بالجهاز ليتم تشغيلها بشكل عام في وقت تسجيل الدخول. يجب أن يكون هذا الملف قابلاً للكتابة فقط بواسطة المستخدم الجذر، ويجب أن يكون قابلاً للقراءة للجميع.


/run/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)، hosts_access(5)، moduli(5)، sshd_config(5)، inetd(8)، sftp-server(8)

المؤلفون

OpenSSH هو مشتق من الإصدار الأصلي والمجاني من ssh 1.2.12 بواسطة تاتو يلونن. قام آرون كامبل وبوب بيك وماركوس فريدل ونييلز بروفوس وثيو دي رادت ودوج سونج بإزالة العديد من الأخطاء وإعادة إضافة ميزات أحدث وإنشاء OpenSSH. ساهم ماركوس فريدل في دعم بروتوكولات SSH 1.5 و 2.0. ساهم نيلز بروفوس وماركوس فريدل في دعم فصل الامتيازات.