Python paramiko无法使用sudo命令

3

我正在尝试使用Python Paramiko ssh模块自动化Linux管理,除了sudo以外,一切都运作正常。我遵循了Paramiko文档中关于sudo的使用方法,使用了stdin.write()stdin.flush(),但目前没有成功。请帮我解决这个问题。

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,username=uname,password=pwd)
print('Successfully authenticated on'+ " " +host)            
print "\n"
stdin,stdout,stderr = ssh.exec_command('sudo ls')
stdin.write(pwd+'\n')
stdin.flush()
print stdout.readlines()
ssh.close()

你有任何错误提示,或者没有输出吗? - Nilesh
我没有收到任何错误,我看到如下信息: 成功通过192.168.1.19进行了身份验证。 - From Gaul
请尝试在控制台上运行相同的命令,您是否遇到了任何问题?如果当前目录中没有文件,则可能会出现此情况。 - Nilesh
2个回答

1

sudo在处理TTY方面有非常具体的方式,以维护其安全性。有一个命令行选项将提示符写入stderr并从stdin读取,而不是sudo直接处理TTY。

尝试使用以下命令:

stdin, stdout, stderr = ssh.exec_command('sudo -S ls')

如果你正在执行系统管理任务,则大部分框架已经完成。如果您习惯于使用Python编写大多数内容,可以查看Fabric;或者像Ansible这样的工具,仍然可以通过ssh控制事物,但是可以使用更简单的yaml格式编写策略。

哇,stdin,stdout,stderr = ssh.exec_command('sudo -S ls') 确实有效。非常感谢您的帮助。 - From Gaul

0

你也可以使用atexit模块。它可以在退出时清理我的函数。 我这样使用:atexit.register(client.close)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接