我有一个 nat,它有各种服务器 所以我想从我的本地服务器转到 nat,然后从 nat 我必须通过 ssh 到其他机器
Local-->NAT(abcuser@publicIP with key 1)-->server1(xyzuser@localIP with key 2) nat 有不同的 ssh key 每个服务器都有不同的 ssh key 我如何使用 fabric 完成这种类型的多跳 ssh 我尝试使用 env.roledefs 功能,但它似乎不起作用 我也不确定如何定义两个 ssh key 。我知道我们可以用 env.key_filename 定义一个 key 列表,但问题是它会检查每个服务器的每个 key 吗?我怎样才能更具体并将一个 key 与一个服务器匹配只有
我已经尝试使用本地机器上的命令 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")
最佳答案
这是可能的。通过网关跃点 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:\n{0.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+。
关于python - 如何使用 fabric 进行多跳 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658874/