如何用面料做多跳ssh

时间:2013-12-18 12:58:05

标签: python ssh fabric ssh-tunnel

我有一个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")

2 个答案:

答案 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 +。