在这篇文章(使用 paramiko 运行 Sudo 命令)之后,我能够sudo
远程运行命令。我可以sudo pkill -2 pure-ftpd
成功执行,但是当我尝试执行时sudo service pure-ftpd start
,尽管我看到 stdout 和 stderr 中的输出是正确的,但我看不到对服务器的任何影响。
这是我的代码:
class RemoteCmdSender(object):
def __init__(self, host, usr=None, passwd=None):
self.host = host
self.usr = usr
self.passwd = str(passwd)
def send_cmd_as_bash(self, cmd):
client = SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy())
client.connect(hostname=self.host, username=self.usr,
password=self.passwd)
transport = client.get_transport()
session = transport.open_session()
session.get_pty('bash')
session.exec_command(cmd)
stdin = session.makefile('wb', -1)
stdin.write(self.passwd.strip() + '\n')
stdin.flush()
stdout = session.makefile('rb', -1).read()
stderr = session.makefile_stderr('rb', -1).read()
client.close()
return stdout, stderr
和执行:
print cmd_sender.send_cmd_as_bash("sudo service pure-ftpd")
输出:
Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -O clf:/var/log/pure-ftpd/transfer.log -8 UTF-8 -u 1000 -B\r\n
sudo service pure-ftpd start
如果我使用 ssh 登录到服务器并在 bash 中写入,这与我得到的输出一致。PS:我想明确一点,当使用 bash 从 ssh 会话运行时,这两个命令都能正常工作