gpt4 book ai didi

python - 使用 Python 子进程的 ssh 的多个命令

转载 作者:行者123 更新时间:2023-11-28 17:05:52 25 4
gpt4 key购买 nike

我需要使用 subprocess 模块在 ssh session 中执行多个 shell 命令。我可以一次执行一个命令:

   subprocess.Popen(["ssh",  "-o UserKnownHostsFile=/dev/null", "-o StrictHostKeyChecking=no", "%s" % <HOST>, <command>])

但是有没有办法在 ssh session 中使用 subprocess 执行多个 shell 命令?如果可能,我不想使用包。

非常感谢!

最佳答案

严格来说,无论您在远程服务器上执行多少条命令,您都只能使用Popen 执行一条命令。该命令是 ssh

要在远程服务器上执行多个命令,只需将它们传递到由 ; 分隔的 command 字符串中:

commands = ["echo 'hi'",  "echo 'another command'"]
subprocess.Popen([
"ssh",
"-o UserKnownHostsFile=/dev/null",
"-o StrictHostKeyChecking=no",
";".join(commands)
])

如果您希望每个命令仅在前一个命令成功时执行,您也可以在 && 上加入命令。

如果您有很多命令并且担心您可能会超出 command line limits ,您可以在远程服务器上使用 -s 选项执行 sh(或 bash),这将在您发送命令时一个接一个地执行它们:

p = subprocess.Popen([
"ssh",
"-o UserKnownHostsFile=/dev/null",
"-o StrictHostKeyChecking=no",
"sh -s",
], stdin=subprocess.PIPE)

for command in commands:
p.stdin.write(command)
p.stdin.write("\n")
p.flush()

p.communicate()

请注意,在 Python3 中,您需要先将命令编码为字节字符串 (command.encode("utf8")),然后再将其写入 stdin 子进程

我觉得这对于大多数简单的情况来说有点矫枉过正,尽管最初的建议是最简单的。

关于python - 使用 Python 子进程的 ssh 的多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111868/

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