0

在这篇文章(使用 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 会话运行时,这两个命令都能正常工作

4

0 回答 0