3

私のシナリオでは、リモート マシンにログインし、( sudo su anotheract) などの別のアカウントに対して sudo を実行してから、他の必要なコマンドを実行する必要があります。

しかし、以下のスクリプトを使用してリモート マシンに正常に接続できます。しかし、スクリプトは、sudo コマンドを実行している行でハングします( sudo su anotheract)

このコードの修正方法を教えてください。

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy())

ssh.connect(hostname='XX.XXX.XX.XX',port=22, username='myname',password='XXXXX')

ssh.exec_command=("sudo su anotheract")

stdout,stdin,stderr=ssh.exec_command("java -jar /usr/share/XXX/LogR.jar")

print stdout.readlines()
4

3 に答える 3

2

1 つの (あまり安全ではない) 方法は、パスワードをパイプすることです。注意点は、paramiko を使用してボックスに接続するために使用しているユーザーが sudo 権限を持っている必要があることです。

例えば:

supass = 'some_pass'

stdout, stdin, stderr = ssh.exec_command('echo %s | sudo -S anotheract' % supass)

繰り返しますが、これはあまり安全な実装ではありませんが、仕事はすぐに完了します。

于 2012-08-10T22:55:34.073 に答える
-1
import pxssh
ssh = pxssh.pxssh()
ssh.login('host', 'user', 'password')
ssh.sendline("sudo su anotheract")
ssh.prompt('yourrootpassword')

そして、ほとんどのLinuxシステムのparamikoでは、sudoがttyからのコマンドを期待し、例外を発生させないため、sudoコマンドを実行できませんが、メソッドinvokeshellを試すことができますが、私は何年も前にparamikoを使用しました。シェルでさまざまなコマンドを送信したい場合は、pxssh を使用できます。

于 2012-08-03T10:46:23.167 に答える
-2

パスワードを待機するため、ハングアップする可能性sudoがあります。NOPASSWD:にステートメントを追加してみてください/etc/sudoers

user    ALL = NOPASSWD: /bin/true

また、使用しているユーザーを変更して、終了su後に何かを続けることはできませんsu。終了するsuと、元のユーザーの元のシェルに戻ります。

したがって、次のコマンドを使用してすべてのコマンドを実行する必要がありますsudo

stdout,stdin,stderr = ssh.exec_command=("sudo -u anotheract java -jar /usr/share/XXX/LogR.jar")
于 2012-08-03T09:39:52.267 に答える