【问题标题】:In my Python code, i need to execute a command from a host1. But that host1 can only be reached from host2 [closed]在我的 Python 代码中,我需要从 host1 执行命令。但是只能从 host2 访问该 host1 [关闭]
【发布时间】:2017-04-20 02:21:43
【问题描述】:

我必须编写一个 python 代码来执行来自客户端的一些命令。 python 脚本需要在 client1 机器中。

该命令必须在 client3 中执行。 但是client3不能直接从client1访问。我们需要先 ssh 到“client2”服务器,然后 ssh 到 client3。

有出路吗?

【问题讨论】:

  • us3 iptables 在 host1 上转发数据包到 host2
  • 我不确定是什么问题。如果没有网关服务器,你会做ssh client2 "command",所以你不能只是ssh gateway "ssh client2 'command'"吗?
  • 无法从 client1 直接访问 client2。您需要先登录到网关服务器,然后从该机器 ssh 到 client2
  • 这个登录中间主机的概念被称为bastion host10mi2.wordpress.com/2015/01/14/…blog.scottlowe.org/2015/11/21/using-ssh-bastion-host 了解一些详细信息以及如何发出 ssh 命令。

标签: python ssh


【解决方案1】:

我没有亲自处理过这个问题,但您听起来可以使用以下答案:How to execute a process remotely using python

这是答案给出的示例:

import subprocess
ret = subprocess.call(["ssh", "user@host", "program"]);

# or, with stderr:
prog = subprocess.Popen(["ssh", "user@host", "program"], stderr=subprocess.PIPE)
errdata = prog.communicate()[1]

使用 subprocess 库,您可以执行 SSH,然后使用您的 python 代码从客户端 1 在 client 2 机器上执行命令。

希望对你有帮助!

【讨论】:

  • 您也可以以Popen(['ssh', 'user@host'], stdin=PIPE) 启动ssh 并使用process.stdin.write('command\n') 执行命令,这在您要发送大量命令时很有用。
  • >>Popen(['ssh', 'user@host'], stdin=PIPE) 如何在此处传递 ssh 密码?
  • 查看上面的答案,似乎最好的解决方案是设置 SSH 密钥来完全避免密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2011-06-06
相关资源
最近更新 更多