我已经在网络上搜索了一段时间,但没有找到解决我的问题的方法。
我的问题是无法使用paramiko运行sudo命令。
起初,我尝试简单地使用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
作为一个侧面说明,我试图在亚马逊网络服务 EC2 实例上运行这些 sudo 命令,所以我很困惑为什么会出现“连接被拒绝”的错误,因为每次我运行此代码都是在一个全新的实例上...
另外,我正在使用 paramiko 1.7.6。