如何使用织物进行多跳 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的主要内容,如果未能解决你的问题,请参考以下文章