如何在远程机器的python脚本中运行paramiko模块中的sudo命令

时间:2012-08-03 09:26:12

标签: python sudo paramiko remote-server

我的方案是我需要登录到远程计算机,然后对另一个帐户(如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()

3 个答案:

答案 0 :(得分:2)

一种(不是很安全)的方法是输入密码。需要注意的是,使用paramiko连接到盒子的用户应该具有sudo权限。

例如:

supass = 'some_pass'

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

同样,这不是一个非常安全的实现,但是可以快速完成工作。

答案 1 :(得分:-1)

import pxssh
ssh = pxssh.pxssh()
ssh.login('host', 'user', 'password')
ssh.sendline("sudo su anotheract")
ssh.prompt('yourrootpassword')

在大多数Linux系统上的paramiko你不能做sudo命令,因为sudo期望来自tty的命令然后它不会引发异常,但是你可以尝试方法invokeshell,但我多年前使用paramiko我不记得出了什么问题用它。如果你想在shell上发送各种命令,可以使用pxssh。

答案 2 :(得分:-2)

由于sudo等待密码,因此可能会出现问题。尝试将NOPASSWD:语句添加到/etc/sudoers

user    ALL = NOPASSWD: /bin/true

也无法使用su更改用户,然后在su完成后继续执行操作。完成su后,您将返回原始用户的原始shell。

因此您需要使用sudo运行所有命令:

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