我试图使用paramiko(linux2上的Python2.7.9)在远程计算机上执行sudo命令,下面是代码。当我执行代码时,它每次都给出不同的输出,而当我在python>>> cmdline中运行相同的代码时,它可以正常工作。
import paramiko
import sys
import time
def send_string_and_wait(command, wait_time, should_print):
shell.send(command)
time.sleep(wait_time)
receive_buffer = shell.recv(1024)
if should_print:
return receive_buffer
dbname='test'
cl='testdb'
host='testhost'
owner='uname'
passwd='p'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(str(host), username=str(owner), password=str(passwd), port=22)
shell = client.invoke_shell()
send_string_and_wait("sudo su - oracle\n", 1, True)
send_string_and_wait(str(passwd) + "\n", 1, True)
a=send_string_and_wait("sh Validation_Final.sh" + str(' ') + str(dbname) + str(' ') + str(cl) + "\n", 0, True)
print a
client.close()
任何建议和建议都将不胜感激,谢谢!
发布于 2016-11-23 10:02:34
几年前,我也有过类似的问题,结果可能有几个原因。
一种可能的选择是,调用等待获得shell提示符以返回。但是,对于需要sudo
的命令,行为可能会发生变化:在某些情况下,需要您首先输入密码。在其他情况下(例如,如果您刚刚使用了sudo
,并且它还没有超时),它将不再需要密码。这种不一致可能会造成问题。
看看这里 --使用-k
可以解决您的问题。
为了解决这个问题,您必须定义(如果可能的话) sudo
总是需要一个密码,从而使它保持一致。
另一个可能引发的问题是shell提示符的定义(一些shell使用>
,另一些使用$
);sudo
可能也是如此--它可能打印Password:
,它不包含shell提示符,远程命令代理可能无法识别,它可能会打印其他东西,例如password
。
https://stackoverflow.com/questions/40761075
复制相似问题