如何使用织物进行多跳 ssh

Posted

技术标签:

【中文标题】如何使用织物进行多跳 ssh【英文标题】:How to do multihop ssh with fabric 【发布时间】:2014-01-06 16:11:05 【问题描述】:

我有一个 nat,它有各种服务器 所以从我的本地服务器我想去 nat 然后从 nat 我必须 ssh 到其他机器

Local-->NAT(abcuser@publicIP with key 1)-->server1(xyzuser@localIP with key 2) nat 有不同的 ssh 密钥 每个服务器都有不同的 ssh 密钥 我如何使用结构完成这种类型的多跳 ssh 我尝试使用 env.roledefs 功能,但它似乎没有工作 我也不确定如何定义两个 ssh 密钥。我知道我们可以使用 env.key_filename 定义一个密钥列表,但问题是它会检查每个服务器的每个密钥吗?我怎样才能更具体并将密钥与一个服务器匹配只有

我尝试使用本地机器上的命令 fab deploy -g 'ec2-user@54.251.151.39' -i '/home/aman/Downloads/aws_oms.pem' 我的脚本是

from __future__ import with_statement
from fabric.api import local, run, cd, env, execute
env.hosts=['ubuntu@10.0.0.77']
env.key_filename=['/home/ec2-user/varnish_cache.pem']
def deploy():
    run("uname -a")

【问题讨论】:

【参考方案1】:

这是可能的。通过网关跳点10.0.0.1 双跳到10.0.0.2(和列表文件)。基本上,您只需使用 gateway 参数嵌套连接即可。

# coding: utf-8

from fabric import Connection

path = '/'
conn1 = Connection(host='user1@10.0.0.1', connect_kwargs='password': '***')
conn2 = Connection(host='user2@10.0.0.2', connect_kwargs='password': '***', gateway=conn1)
result = conn2.run(f'''cd path && ls -al''', hide=True)
conn2.close()
conn1.close()
msg = "Ran 0.command!r on 0.connection.host, got stdout:\n0.stdout"
print(msg.format(result))

请记住手动运行一次 SSH 连接以将服务器相互介绍!

通过安装

pip3 install --upgrade fabric
pip3 install cryptography==2.4.2  # optional to hide some annoying warnings

http://docs.fabfile.org/en/latest/concepts/networking.html

Python 3.6+。

【讨论】:

【参考方案2】:

为了通过中间服务器连接到远程主机,您可以使用--gateway 命令行选项:

http://docs.fabfile.org/en/latest/usage/fab.html#cmdoption-g

或者,或者,在您的 fabfile 中设置 env.gateway 变量:

http://docs.fabfile.org/en/latest/usage/env.html#gateway

更多详细信息,请参见:

http://docs.fabfile.org/en/stable/concepts/networking.html#ssh-gateways

【讨论】:

thnx 它成功了,但我想知道如果我之间还有一跳,我会怎么做 @ronnix 链接失效,请修复 修复了链接 问题是如何用不止一跳来做到这一点?文档从不谈论这个。

以上是关于如何使用织物进行多跳 ssh的主要内容,如果未能解决你的问题,请参考以下文章

SSH实现多跳代理

在多跳 SSH 连接上重新建立交互式 shell

如何在织物画布中使用背景图像获取绘图路径中的图像?

如何在织物文本对象中应用自定义字体?

如何使用自定义钩子访问织物对象以将背景图像添加到画布?

如何在角度中使用织物js将两个画布(外部和内部)保存为png