2024-05-23 15:49:04 发布
网友
情况: A和B是远程主机。 本地计算机可以通过SSH连接到A,但不能连接到B。 B只接受来自A的SSH连接
问题: 是否可以在本地计算机上使用fabric在主机B上执行命令,最好不必在A上安装fabric?
因为Fabric v1.5+有一个名为remote_tunnel的方法来解决蔓越莓的问题
remote_tunnel
我使用了一个简单的命令(hostname)来说明解决方案,但是可以使用其他任何命令。如您所见,我们通过使用远程计算机作为跳转主机从本地计算机调用了要在远程计算机B上执行的命令:
from fabric.api import settings, env, run, remote_tunnel env.hosts=["user@remote_machineA"] def funct1(): def func1b(host): with settings(host_string=host): run("hostname") with remote_tunnel(remote_port=22022, local_port=22, local_host="remote_machineB", remote_bind_address="0.0.0.0"): funct1b("user@remote_machineA:22022")
如果在本地计算机中执行此fab文件,我们将得到:
[user@local_machine ~]# fab hostname_check [user@remote_machineA] Executing task 'hostname_check' [user@remote_machineA:22022] run: hostname [user@remote_machineA:22022] rtunnel: opened reverse tunnel: (u'X.X.3.75', 55804) -> ('X.X.3.78', 22) -> ('remote_machineB', 22) [user@remote_machineA:22022] out: remote_machineB [user@remote_machineA:22022] out: Terminated
为此,使用GatewayPorts yes配置此跳转机器ssh守护进程非常重要。否则,只能从本地主机访问远程隧道。
GatewayPorts yes
检查:
tcp 0 0 127.0.0.1:22022 0.0.0.0:* LISTEN
对:
tcp 0 0 0.0.0.0:22022 0.0.0.0:* LISTEN
有关详细信息,请查看官方文档http://docs.fabfile.org/en/latest/api/core/context_managers.html#fabric.context_managers.remote_tunnel
我用env.gateway实现了这个目标,如下所示:
from fabric.api import * env.forward_agent = True env.gateway = 'user@remote_MachineA' env.hosts = ['user@remote_MachineB'] def function1(): run('hostname')
env.forward_agent = True是否只允许将本地SSH代理转发到远程端
env.forward_agent = True
或者,您可以使用ssh ProxyCommand,example here并告诉fabric使用~/.ssh/config使用use_ssh_config = True,文档here
~/.ssh/config
use_ssh_config = True
看来这可能是个骗局:
https://gist.github.com/856179
因为Fabric v1.5+有一个名为
remote_tunnel
的方法来解决蔓越莓的问题我使用了一个简单的命令(hostname)来说明解决方案,但是可以使用其他任何命令。如您所见,我们通过使用远程计算机作为跳转主机从本地计算机调用了要在远程计算机B上执行的命令:
如果在本地计算机中执行此fab文件,我们将得到:
为此,使用
GatewayPorts yes
配置此跳转机器ssh守护进程非常重要。否则,只能从本地主机访问远程隧道。检查:
对:
有关详细信息,请查看官方文档http://docs.fabfile.org/en/latest/api/core/context_managers.html#fabric.context_managers.remote_tunnel
我用env.gateway实现了这个目标,如下所示:
env.forward_agent = True
是否只允许将本地SSH代理转发到远程端或者,您可以使用ssh ProxyCommand,example here并告诉fabric使用
~/.ssh/config
使用use_ssh_config = True
,文档here看来这可能是个骗局:
https://gist.github.com/856179
相关问题 更多 >
编程相关推荐