我有一个nat,它有各种服务器 所以从我的本地服务器我想去nat然后从nat我必须ssh到其他机器
本地 - > NAT(abcuser @ publicIP with key 1) - > server1(xyzuser @ localIP with key 2) nat有不同的ssh密钥 并且每个服务器都有不同的ssh密钥 如何使用Fabric完成这种类型的multihop 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")
答案 0 :(得分:5)
要通过中间服务器连接到远程主机,您可以使用--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
答案 1 :(得分:0)
有可能。通过网关跃点10.0.0.2
双跳到10.0.0.1
(和列表文件)。基本上,您只需使用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 +。