0

我正在尝试通过 python 对远程机器执行一些命令

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(SERVER_IP, username='root', password='xxxxx')
    stdin, stdout, stderr = ssh.exec_command(
        "tar -C /home -xzf /home/Tests.tar.gz;dos2unix /home/Tests/run.py;chmod +x /home/Tests/run.py;/home/Tests/run.py>/home/Tests/log.txt"
    )

似乎最后一个命令/home/Tests/run.py>/home/Tests/log.txt不起作用,log.txt没有值,如果我/home/Tests/run.py>/home/Tests/log.txt在远程机器终端上做同样的工作。

如何解决?

提前致谢

4

2 回答 2

1

您不会像这样将客户端传输到会话:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(SERVER_IP, username='root', password='xxxxx')
#note the next line you are missing
ssh_session = ssh.get_transport().open_session()

然后(在声明 ssh_session 之后)你可以使用ssh_session.exec_command(. . .).

试试看它是否有效。

于 2015-09-11T20:28:40.100 回答
0

为了确保您的paramiko代码正常工作并且正在建立连接,请尝试一些简单的事情,例如

stdin, stdout, stderr = ssh.exec_command("hostname")

并确保其中stdin包含您所期望的。然后尝试调试您正在远程执行的命令:

$ tar -C /home -xzf /home/Tests.tar.gz
$ dos2unix /home/Tests/run.py
$ chmod +x /home/Tests/run.py
$ /home/Tests/run.py > /home/Tests/log.txt

如果您通过常规ssh连接在删除机器上运行代码,如果您希望它也能正常工作,它必须按照您的预期执行paramiko

于 2013-04-25T13:20:05.147 回答