إذا تم حذف --password، يطلب الخادم كلمة مرور تسجيل الدخول إلى USSH عند بدء التشغيل.
عند بدء التشغيل التفاعلي، يسأل الخادم عما إذا كان يجب تثبيت نفسه كخدمة systemd. أجب بـ n لتشغيله بشكل عادي. استخدم --no-systemd-prompt لتخطي هذا السؤال.
يخزّن العميل أول مفتاح عام X25519 للخادم يشاهده في ~/.ussh_known_hosts.json.
إذا تغيّر هذا المفتاح لاحقًا، يوقف العميل العمل مع رسالة خطأ عدم تطابق TOFU بدلاً من الثقة الصامتة بالمفتاح الجديد.
إذا قمت بتدوير مفتاح مضيف الخادم عمدًا، شغّل العميل مع --regen-key للسماح باستبدال مفتاح TOFU المخزّن بعد تأكيد تفاعلي.
يدعم USSH أيضًا وضع DATA النصي الواضح الاختياري مع سلامة HMAC لكل حزمة:
جانب الخادم: --cleartext auto|on|off
جانب العميل: --cleartext on|off
مع الخادم auto، يتبع USSH طلب العميل.
مع الخادم on أو off، يفرض الخادم وضع النص الواضح النهائي.
عند استخدام --cleartext on، يطبع USSH تحذيرًا بأن النص الواضح خطير على الإنترنت الحقيقي ولا يُنصح به إلا في بيئات خاضعة للتحكم مثل شبكة محلية.
تحت USSH، يستخدم USTPS أسطر تحكم ASCII قابلة للقراءة مثل ACK: 10 MAC:<tag>، NACK: 42 MAC:<tag>، HELLO: ...، CLOSE:، بالإضافة إلى إطارات DATA الثنائية UPACK (UPAK).
تبقى ACK و كنص واضح لأغراض قابلية التصحيح، لكنها موثّقة بعلامة HMAC لكل جلسة لمنع هجمات التحكم المزيفة عبر ACK/NACK.
مصافحة النقل
يرث USSH نفس مصافحة رمز إعادة المحاولة USTPS مثل USTP-Secure.
يتحدى الخادم أولاً العميل برمز إعادة محاولة وبيانات وصفية للجلسة.
يجب على العميل إعادة صدى هذا الرمز قبل قبول جلسة USSH المشفرة.
تتفاوض نفس المصافحة أيضًا على تشفير AEAD النهائي وما إذا كان USTPS Congestionon أو off.
تتفاوض نفس المصافحة أيضًا على ما إذا كانت DATA تستخدم تشفير AEAD أو نصًا واضحًا مع HMAC.
رمز إعادة المحاولة هو فقط دليل على قابلية الوصول قبل إنشاء الجلسة.
إنه ليس مفتاح الجلسة، وليس nonce للحزمة، وليس بديلاً عن مفتاح جلسة AEAD المشتق لاحقًا.
في وضع النص الواضح، لا يتم تشفير حمولات DATA، لكنها لا تزال تحمل HMAC بحيث لا يمكن لطرف ثالث تعديلها دون اكتشاف.
يرث USSH سقف حمولة نقل USTPS البالغ 900 بايت لكل حمولة DATA من نوع UPACK.
لا يعرّف USSH طبقة تجزئة ثانية أسفل USTPS.
سلوك MTU على مستوى النقل، وPMTU، وسلوك nonce، ومعالجة التكرار، ومعالجة الحزم القديمة موروثة من USTPS.
تمت إزالة الترحيل التلقائي للشبكة/المسار.
إذا غيّر العميل شبكته وتغيّر IP:port المصدر الخاص به، فمن المتوقع أن تُغلق جلسة USSH الحالية ويجب على المستخدم إعادة الاتصال بشكل نظيف.
تمت إزالة تنفيذ الترحيل لأنه تسبب في مشاكل موثوقية وأمان عملية:
فيضانات ترحيل متكررة عندما غيّرت شبكات NAT أو الشبكات المحمولة مساراتها بسرعة
جلسات بدت مستعادة لكنها توقفت عن تسليم بيانات الطرفية
فترات صمت طويلة قبل أن يلاحظ العميل أن المسار ميت
غموض بين عميل متجول حقيقي وحزم مزيفة تدّعي جلسة قائمة
حالة استعادة قد تترك الطرفية عالقة بدلاً من إعادة الاتصال بشكل نظيف
السلوك الحالي أبسط عمدًا: التحقق من العميل على IP:port الحالي، وربط الجلسة بهذه النقطة الطرفية، وإعادة الاتصال إذا تغيّرت النقطة الطرفية.
يرث USSH USTPS Congestion الاختياري من النقل.
جانب الخادم: --congestion-control auto|on|off
جانب العميل: --congestion-control on|off
مع الخادم auto، يتبع USSH طلب العميل. مع الخادم on أو off، يفرض الخادم الوضع النهائي.
يبقى USTP-Secure نفسه غير مرتب.
لا يحوّل USSH النقل إلى قناة مرتبة تشبه TCP.
يعيد USSH فقط تجميع تدفق بايتات stdout المنطقي قبل الكتابة إلى الطرفية.
قد يحافظ USSH أيضًا على الترتيب على مستوى التطبيق لأجزاء إدخال/إخراج الشل حيث يتوقع PTY سلوك تدفق بايتات متماسك.
هذا التجميع موجود لأن إخراج شل تفاعلي هو تدفق بايتات مستمر، وعرض بايتات الطرفية بترتيب الوصول الخام يمكن أن يفسد مخرجات كبيرة مثل ls أو find أو سجلات المترجم.
هذا يعني أن USTP-Secure لا يزال يتجنب حظر Head-of-Line على مستوى النقل، بينما يستعيد USSH فقط الترتيب على مستوى التطبيق المطلوب لعرض الطرفية.
يتم تشفير الحمولات لكل حزمة باستخدام AEAD.
لا يُستخدم PSK ثابت.
يتلقى كل عميل مفتاح جلسة AEAD مؤقتًا منفصلًا عبر X25519.
تُستخدم كلمة المرور لمصادقة USSH بعد إنشاء الجلسة الآمنة.
يطلق الخادم شلًا حقيقيًا مدعومًا بـ PTY على الجهاز الذي يشغّل ussh_server.py.
يرسل العميل بايتات stdin ويعرض بايتات stdout.
يدعم الخادم عدة عملاء، مع شل/جلسة واحدة لكل عميل.
إذا تم تعيين --cipher على الخادم، يستخدم الخادم ذلك التشفير بالضبط.
إذا تم حذف --cipher أو تعيينه إلى auto، يستخدم الخادم التشفير الذي يطلبه العميل.
يرفض العملاء التفاوض غير المتوقع على التشفير.
TOFU (الثقة عند أول استخدام) مفعّل على العميل لاكتشاف تغييرات مفاتيح الخادم غير المتوقعة بعد أول اتصال.
يحتفظ الخادم بمفتاح مضيف X25519 دائم في ~/.ussh_host_key افتراضيًا بحيث يبقى TOFU مستقرًا عبر عمليات إعادة الاتصال وإعادة التشغيل.
إعادة تشغيل الخادم العادية لا تغيّر مفتاح المضيف.
استخدم --regen-key على الخادم فقط عندما تريد عمدًا تدوير مفتاح المضيف هذا.
تُخزَّن إدخالات TOFU لكل <peer-ip-or-domain>:<peer-port>، لذا يُعامل خادم مختلف على عنوان/منفذ مختلف كهوية مضيف مختلفة.