繁体   English   中英

帕拉米科和苏多

[英]Paramiko and sudo

我一直在寻找网络一段时间来解决我的问题,没有运气。

我的问题是我似乎无法使用suram命令与paramiko一起运行。

起初,我试图简单地使用SSHClient()。exec_command(command)函数来执行sudo命令,但是这个错误:

sudo: sorry, you must have a tty to run sudo

然后,按照这篇文章的建议: 如何使用Paramiko制作sudo命令 ,我试过这个:

#self._ssh is the SSHClient object    
self._ssh.invoke_shell().exec_command(command)

但是,大部分时间,这只是给了我:

File "pipelines/load_instance/ssh_tools.py", line 71, in executeCommand
    stdin, stdout, stderr = self._ssh.invoke_shell().exec_command(command)
  File "<absolute_path>/paramiko/channel.py", line 213, in exec_command
    self._wait_for_event()
  File "<absolute_path>/paramiko/channel.py", line 1084, in _wait_for_event
    raise e
paramiko.SSHException: Channel closed.

另外,我不得不说,40%的时间,我得到这个:

File "<absolute_path>/paramiko/client.py", line 291, in connect
    sock.connect(addr)
File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused

作为旁注,我正在尝试在Amazon Web Services EC2实例上运行这些sudo命令,所以我很困惑为什么我会得到Connection Refused错误,因为每次运行此代码时它都是一个全新的例如...

另外,我正在使用paramiko 1.7.6。

这是近期分布和影响的常见问题,而不仅仅是paramiko。 (前几天,当我将一个盒子从fedora2升级到最新版时,我遇到了它。几个ssh / sudo管理脚本破了)

只要您有权访问远程主机,就可以编辑/etc/sudoers并注释掉该行: Defaults requiretty

sudoers手册页中的详细信息:

requiretty

如果设置,sudo将仅在用户登录到真实tty时运行。 这将禁止诸如“rsh somehost sudo ls”之类的内容,因为rsh(1)不会分配tty。 由于在没有tty存在时无法关闭回声,因此某些站点可能会设置此标志以防止用户输入可见密码。 此标志默认为关闭。

stdin, stdout, stderr = client.exec_command(cmd,  get_pty=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM