سؤال

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

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

bob@host$ su jim && ls ~bob

المشكلة أننا على مطالبتك جيم كلمة المرور.لأن هذا هو تشغيل من برنامج Java ، أي

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

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

بالإضافة إلى ذلك, لا يمكننا استخدام نتوقع النصي (لا يكون ذلك مثبتا) ونحن لا يمكن أن تصبح الخارق.أنا أيضا بحثت باستخدام SSH محاولة هذا ، حيث يمكننا من الناحية الفنية لا

bob@host$ ssh jim@host "ls ~bob"

ولكن هذا أيضا لا يعمل منذ أن كنت لا تملك تصريح الإعداد باسفوردلس SSH.

آخر بمحاولة هو محاولة استخدام SSH مكتبة جافا منذ المرور المتاحة جافا البرنامج سوف تكون قادرا على تسجيل الدخول مع أن (وتنفيذ قيادة سليم).ولكن منذ أنا ذاهب إلى أن تكون قيد التشغيل على نفس المضيف يبدو مبالغة.

أي اقتراحات ؟

P. S:جافا الإصدار 1.4.2, لا يمكن ترقية ، AIX UNIX 5.3.

هل كانت مفيدة؟

المحلول 2

المشكلة حلها.تستخدم JSch (http://www.jcraft.com/jsch/) إلى SSH إلى الخادم المعروف اسم المستخدم وكلمة المرور ، وتنفيذ الأوامر.شكرا جميعا على اقتراحاتكم!

نصائح أخرى

وقد سودو تثبيت لدي المستخدم تشغيل برنامج جافا دخلت في /etc/sudoers عن الأوامر في السؤال ، واستخدام sudo -u jim ls ~bob.

ربما جافا تنفيذ تتوقع ؟ ExpectJ يأتي عند البحث في قوقل ولكن لم أتمكن من العثور على أي وثائق تتعلق تعمل تحت 1.4.2.

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

استخدام getInputStream() وكتابة كلمة المرور الخاصة بك إلى ذلك.

su jim -c ls ~Bob

ربما هذا من شأنه أن يعمل:

Process process = Runtime.getRuntime().exec("su jim && ls ~bob");

OutputStream standardInput = process.getOutputStream();
Writer standardInputWriter = new OutputStreamWriter(standardInput);
standardInputWriter.write("password\n");
standardInputWriter.close();

أنا غير متأكد من هذا الكود:

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

سيتم تنفيذه في قذيفة ، هناك حاجة إلى تقييم & & هذا هو الأمر shell (/bin/sh).يجب أن يمر الأمر "هل ~بوب" عبر سطر الأوامر سويث سو.شيء من هذا القبيل:

su jim -c 'ls ~bob'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top