تنفيذ مستخدم su (بدون كلمة مرور) على اتصال paramiko ssh

StackOverflow https://stackoverflow.com/questions/8418026

سؤال

أحتاج إلى تسجيل الدخول باستخدام ssh إلى خادم، والقيام بـ "اسم المستخدم su" (بدون كلمة مرور) لتنفيذ بعض الأوامر مثل هذا المستخدم (الذي ليس لديه تسجيل دخول مباشر في ssh).

من المحطة سيكون شيء من هذا القبيل:

root@cs01:~# su foo
foo@cs01:/root$ cd
foo@cs01:~$ ls

لقد حاولت القيام بذلك باستخدام paramiko (python):

import paramiko
ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('host', username='root', password='mypassword', key_filename='<filename>')

stdin, stdout, stderr = ssh.exec_command('su foo')
print stdout.readlines()
stdin, stdout, stderr = ssh.exec_command('cd')
print stdout.readlines()
stdin, stdout, stderr = ssh.exec_command('pwd')
print stdout.readlines()
ssh.close()

لكن السيناريو لا ينتهي.

السجلات هي هذه:

...
DEB [20111207-16:22:25.538] thr=1   paramiko.transport: userauth is OK
INF [20111207-16:22:25.921] thr=1   paramiko.transport: Authentication (publickey) successful!
DEB [20111207-16:22:25.923] thr=2   paramiko.transport: [chan 1] Max packet in: 34816 bytes
DEB [20111207-16:22:26.088] thr=1   paramiko.transport: [chan 1] Max packet out: 32768 bytes
INF [20111207-16:22:26.088] thr=1   paramiko.transport: Secsh channel 1 opened.
DEB [20111207-16:22:26.151] thr=1   paramiko.transport: [chan 1] Sesch channel 1 request ok

إذا حاولت هذا فقط:

stdin, stdout, stderr = ssh.exec_command('su foo')
#without print
stdin, stdout, stderr = ssh.exec_command('pwd')
print stdout.readlines()

فهو ينفذ pwd كجذر، وليس كـ foo.

ما هو الخطأ؟

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

المحلول

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

يمكنك استخدام ال sudo الأمر، أو su -c لتنفيذ الأمر..ومع ذلك، أود أن أقترح تكوين تسجيل دخول آمن للمستخدم المطلوب، والاتصال بهذا المستخدم مباشرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top