python - 如何使用 fabric 进行多跳 ssh

标签 python ssh fabric ssh-tunnel

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

相关文章:

python - 如何将 pip 版本 10.0.0 降级到 pip 版本 9.0.1?

amazon-web-services - 如何在cloudformation模板中生成并插入ssh公钥定义?

python - “cd”命令不适用于 fabric3

python - Fabric 日志格式显示日期和时间

用于监视程序和控制微 Controller 的Python脚本

python - 尝试安装 pyautogui 时出错

python - txt文件中最长的单词python代码?

ssh - WinSCP - 主机 key 算法首选项

linux - 127 构建步骤 > 'Execute shell script on remote host using ssh' 标记构建为 > 失败完成 : FAILURE

python - 在 Fabric 中,如何检查 Debian 或 Ubuntu 软件包是否存在,如果不存在则安装它?