【问题标题】:Python paramiko sudo doesnt workPython paramiko sudo 不起作用
【发布时间】:2019-01-24 15:37:50
【问题描述】:

我正在尝试使用 Python Paramiko ssh 模块自动执行 linux 管理,除了 sudo 之外一切正常。我使用stdin.write()stdin.flush() 遵循了sudo 的paramiko 文档,但到目前为止没有运气。请帮助我。

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()

【问题讨论】:

  • 你有任何错误,或者没有输出?
  • 我没有得到任何错误,我看到如下在 192.168.1.19 [] 上成功验证
  • 请尝试在控制台上运行相同的命令,你有什么问题吗?如果当前目录中没有文件,可能会发生这种情况。

标签: python ssh sudo paramiko


【解决方案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') 确实有效。非常感谢您的帮助
【解决方案2】:

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

【讨论】:

    最近更新 更多