首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在远程服务器上执行命令,该命令需要使用密码输入的Sudo - Paramiko

在远程服务器上执行命令,该命令需要使用密码输入的Sudo - Paramiko
EN

Stack Overflow用户
提问于 2016-11-23 09:55:44
回答 1查看 1.1K关注 0票数 1

我试图使用paramiko(linux2上的Python2.7.9)在远程计算机上执行sudo命令,下面是代码。当我执行代码时,它每次都给出不同的输出,而当我在python>>> cmdline中运行相同的代码时,它可以正常工作。

代码语言:javascript
运行
复制
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() 

样本输出

任何建议和建议都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 10:02:34

几年前,我也有过类似的问题,结果可能有几个原因。

一种可能的选择是,调用等待获得shell提示符以返回。但是,对于需要sudo的命令,行为可能会发生变化:在某些情况下,需要您首先输入密码。在其他情况下(例如,如果您刚刚使用了sudo,并且它还没有超时),它将不再需要密码。这种不一致可能会造成问题。

看看这里 --使用-k可以解决您的问题。

为了解决这个问题,您必须定义(如果可能的话) sudo总是需要一个密码,从而使它保持一致。

另一个可能引发的问题是shell提示符的定义(一些shell使用>,另一些使用$);sudo可能也是如此--它可能打印Password:,它不包含shell提示符,远程命令代理可能无法识别,它可能会打印其他东西,例如password

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40761075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档