بيثون - كيفية استخدام محارة لإنشاء ملقم SSH الظاهري
سؤال
وأنا أبحث في إنشاء ملقم في بيثون أستطيع أن تشغيل، وسوف تعمل كخادم SSH. وهذا لتسمح لمختلف المستخدمين تسجيل الدخول، وتتصرف كما لو انها تريد تسجيل في العادة، ولكن كان فقط الوصول إلى أمر واحد.
وأريد أن أفعل هذا لدرجة أنني يمكن أن يكون لها نظام حيث يمكنني أن أضيف للمستخدمين دون الحاجة إلى إنشاء حساب نطاق المنظومة، بحيث يمكن بعد ذلك، على سبيل المثال، الالتزام فرع VCS، أو ما شابه ذلك.
وحين أستطيع أن العمل على كيفية القيام بذلك مع محارة لحملها على قذيفة "العرف" ... لا أستطيع معرفة كيفية جعله بحيث يعمل تيار SSH كما لو كانت حقيقية واحدة ( أنا يفضل الرغبة في الحد من / بن / BZR بحيث BZR + سه ستعمل.
ويجب أن يكون في بيثون (التي يمكنني الحصول على القيام ترخيص)، ولكن لا أعرف كيفية القيام الربط إلى التطبيق.
وهذا يجب أن يكون في بيثون للعمل ضمن التطبيق المصممة من أجل، وتكون قادرة على أن تستخدم لأولئك الذين لا يستطيعون الحصول على إضافة مستخدمين جدد
المحلول
وعندما تكتب الخادم محارة، يمكنك السيطرة على ما يحدث عندما يقوم العميل طلب قذيفة من خلال تنفيذ <وأ href = "http://twistedmatrix.com/trac/browser/trunk/twisted/conch/interfaces.py ؟ دوران المحرك = 24441 # L62 "يختلط =" noreferrer "> ISession.openShell
. سيقوم الملقم القوقع طلب IConchUser
من المجال الخاص بك ومن ثم التكيف تجسد الآلهة مما أدى إلى ISession
للاتصال openShell
عليه إذا لزم الأمر.
وظيفة ISession.openShell
هو اتخاذ الكائن النقل تمريرها إليه وربطه مع بروتوكول لتفسير بايت تلقى منه، وإذا رغبت في ذلك، لكتابة بايت إليها ليتم إرسالها إلى العميل.
في تطور مؤسف، الكائن الذي تم تمريره إلى openShell
الذي يمثل النقل هو في الواقع <لأ href = "http://twistedmatrix.com/trac/browser/trunk/twisted/internet/interfaces.py؟rev=24441 # L1028 "يختلط =" noreferrer "> IProcessProtocol
مزود . هذا يعني أنك تحتاج إلى استدعاء makeConnection
أ > على ذلك، تمرير IProcessTransport
مزود. عند تلقي البيانات من العميل، فإن IProcessProtocol
الاتصال <لأ href = "http://twistedmatrix.com/trac/browser/trunk/twisted/internet/interfaces.py؟rev=24441#L1282" يختلط = "noreferrer" > writeToChild
على نقل تمرر إلى makeConnection
. عندما كنت ترغب في إرسال البيانات إلى العميل، يجب عليك الاتصال <لأ href = "http://twistedmatrix.com/trac/browser/trunk/twisted/internet/interfaces.py؟rev=24441#L1043" يختلط = "noreferrer "> childDataReceived
على ذلك.
لمعرفة السلوك المحدد، أقترح قراءة <لأ href = "http://twistedmatrix.com/trac/browser/trunk/twisted/conch/ssh/session.py؟rev=24441#L173" يختلط = " noreferrer "> تنفيذ IProcessProtocol
الذي تم تمريره في . لا تعتمد على أي شيء هذا ليس جزءا من IProcessProtocol
، ولكن يمكن رؤية تنفيذ جعلها أسهل للفهم ما يجري.
ويمكنك أيضا أن ننظر إلى لل تنفيذ قذيفة خلق وضعها الطبيعي للحصول على شعور ما كنت تهدف ل. هذا وسوف تعطيك فكرة عن كيفية ربط stdio عملية طفل BZR قمت بتشغيل مع قناة SSH.
نصائح أخرى
وعلى الرغم بيثون هو حقا لغتي المفضلة، أعتقد أنك لا تحتاج إلى إنشاء كنت تملك الخادم لهذا الغرض. عند إلقاء نظرة على المفتوح Manualpage لسشد الذي 'ليرة لبنانية العثور على خيارات "القيادة" لملف مفاتيح أذن التي تمكنك من تحديد أمر معين لتشغيل على تسجيل الدخول.
وعن طريق المفاتيح، يمكنك استخدام حساب نظام واحد للسماح للكثير من المستخدمين لتسجيل الدخول، فقط وضعت مفاتيح العامة في ملف مفاتيح أذن الحساب.
ونحن نستخدم هذا إلى إنشاء أنفاق SSH لSVN ويعمل كبيرة فقط.