首页 > 解决方案 > 当我使用fabric == 2.4.0'sudo helper getpass.getpass'时如何修复'没有可用的身份验证方法'

问题描述

当我使用python结构模块时,按照教程:点击这里 连接远程主机,并执行shell命令,但出现错误:</p>

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<decorator-gen-4>", line 2, in sudo
  File "/root/tempFabric/env/lib/python2.7/site-packages/fabric/connection.py", line 29, in opens
    self.open()
  File "/root/tempFabric/env/lib/python2.7/site-packages/fabric/connection.py", line 615, in open
    self.client.connect(**kwargs)
  File "/root/tempFabric/env/lib/python2.7/site-packages/paramiko/client.py", line 437, in connect
    passphrase,
  File "/root/tempFabric/env/lib/python2.7/site-packages/paramiko/client.py", line 750, in _auth
    raise SSHException("No authentication methods available")
paramiko.ssh_exception.SSHException: No authentication methods available
$ import getpass
$ from fabric import Connection, Config
$ sudo_pass = getpass.getpass("123456")
123456
$ config = Config(overrides={'sudo': {'password': sudo_pass}})
$ c=Connection(host='192.168.0.156',user='ai',port=22,config=config)
$ c.sudo('whoami', hide='stderr')

我希望的输出c.sudo('whoami', hide='stderr')是:

ai
<Result cmd="...whoami" exited=0>

标签: pythonfabric

解决方案


尝试这个

from fabric import Connection
result = Connection('web1', user='hello', connect_kwargs={
    "password": "123456",
    }, port=22).run('uname -s', hide=True)
msg = "Ran {0.command!r} on {0.connection.host}, got stdout:\n{0.stdout}"
print(msg.format(result))

推荐阅读