我正试图通过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
,那么同样有效。
如何解决?
提前致谢
答案 0 :(得分: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(. . .)
。
试试看它是否有效。
答案 1 :(得分: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
上运行。