gpt4 book ai didi

Python 子进程 - 通过 SSH 运行多个 shell 命令

转载 作者:太空狗 更新时间:2023-10-29 21:24:30 25 4
gpt4 key购买 nike

我正在尝试打开一个从一个 Linux 机器到另一个 Linux 机器的 SSH 管道,运行一些 shell 命令,然后关闭 SSH。

我无法控制任何一个盒子上的包裹,所以像 fabric 或 paramiko 这样的东西是不可能的。

我曾幸运地使用以下代码运行一个 bash 命令,在本例中为“正常运行时间”,但我不确定如何一个接一个地发出命令。我期待这样的事情:

sshProcess = subprocess.call('ssh ' + <remote client>, <subprocess stuff>)
lsProcess = subprocess.call('ls', <subprocess stuff>)
lsProcess.close()
uptimeProcess = subprocess.call('uptime', <subprocess stuff>)
uptimeProcess.close()
sshProcess.close()

我缺少子流程模块的哪一部分?

谢谢

pingtest = subprocess.call("ping -c 1 %s" % <remote client>,shell=True,stdout=open('/dev/null', 'w'),stderr=subprocess.STDOUT)
if pingtest == 0:
print '%s: is alive' % <remote client>
# Uptime + CPU Load averages
print 'Attempting to get uptime...'
sshProcess = subprocess.Popen('ssh '+<remote client>, shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
sshProcess,stderr = sshProcess.communicate()
print sshProcess
uptime = subprocess.Popen('uptime', shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
uptimeProcess,stderr = uptimeProcess.communicate()
uptimeProcess.close( )
print 'Uptime : ' + uptimeProcess.split('up ')[1].split(',')[0]
else:
print "%s: did not respond" % <remote client>

最佳答案

基本上,如果您调用子流程,它会创建一个本地子流程而不是远程子流程所以你应该与 ssh 进程交互。所以沿着这条线:但请注意,如果您动态构建我的目录,它很容易受到 shell 注入(inject)的影响,那么 END 行应该是一个唯一标识符为了避免 END 行问题的唯一性,最简单的方法是使用不同的 ssh 命令

from __future__ import print_function,unicode_literals
import subprocess

sshProcess = subprocess.Popen(['ssh',
'-tt'
<remote client>],
stdin=subprocess.PIPE,
stdout = subprocess.PIPE,
universal_newlines=True,
bufsize=0)
sshProcess.stdin.write("ls .\n")
sshProcess.stdin.write("echo END\n")
sshProcess.stdin.write("uptime\n")
sshProcess.stdin.write("logout\n")
sshProcess.stdin.close()


for line in sshProcess.stdout:
if line == "END\n":
break
print(line,end="")

#to catch the lines up to logout
for line in sshProcess.stdout:
print(line,end="")

关于Python 子进程 - 通过 SSH 运行多个 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com