使用 Paramiko 设置 SSH 隧道来访问 PostgreSQL

2023-11-30

我目前使用 Paramiko 访问 SFTP 服务器并连接到同一服务器上的 PostgreSQL。我发现很多例子使用sshtunnel登录 PostgreSQL。但我不知道如何用纯Paramiko 做到这一点。

目前我的代码看起来像这样:

# establish SSH tunnel
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(hostname=host, username=user, password=password)

# setup SFTP server
self.sftp = self.ssh.open_sftp()

# connect to datebase
self.engine = create_engine('postgres+psycopg2://{}:{}@{}:{}/{}'.format(user, password, host, port, db))

感谢您的任何建议!


使用 SSH 端口转发。

修改代码自使用 Python Paramiko 的嵌套 SSH对于数据库隧道,您会得到如下代码:

# establish SSH tunnel
self.ssh = paramiko.SSHClient()
# ...
self.ssh.connect(hostname=ssh_host, username=ssh_user, password=ssh_password)

transport = ssh_client.get_transport()
dest_addr = (db_host, db_port)
local_unique_port = 4000 # any unused local port
local_host = 'localhost'
local_addr = (local_host, local_unique_port)
vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr, local_addr)

self.engine = create_engine(
    'postgres+psycopg2://{}:{}@{}:{}/{}'.format(
        db_user, db_password, local_host, local_unique_port, db))

如果 PostgreSQL 数据库在 SSH 服务器本身上运行,那么它通常只会侦听环回接口。在这种情况下db_host应设置为localhost.


尽管请注意sshtunnel只是 Paramiko 的包装。所以一般来说,你可以使用它来简化代码,除非你有一些限制阻止你安装额外的包。

例如:在Python中通过SSH隧道连接到PostgreSQL数据库


基于关于 MongoDB 的相同问题:
在Python中使用私钥通过SSH连接并查询Mongo数据库
.


强制性警告:请勿使用AutoAddPolicy- 您正在失去针对中间人攻击通过这样做。正确的解决方案请参见Paramiko“未知服务器”.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Paramiko 设置 SSH 隧道来访问 PostgreSQL 的相关文章

随机推荐

  • 如何使用 HSSF (Apache POI) 在现有 Excel 中的两行之间插入一行

    不知何故 我设法在现有 Excel 文件中的两行之间创建新行 问题是 一些格式没有包含在行的移动中 其中之一是隐藏的行在轮班期间没有相对地进行 我的意思是 例如 第 20 到 30 行被隐藏 但是当创建新行时 格式仍然存在 在插入 创建新行
  • Javascript 多个键具有相同的值 - 它们是否指向同一个地方?

    我有以下简化代码 var obj key1 aliases alias1 alias2 prop1 someVal prop2 someOtherVal var objHashMap for var key in obj objHashMa
  • 在 2D 列表中查找值的 Pythonic 方法? [复制]

    这个问题在这里已经有答案了 使用 numpy 数组 您可以使用切片检查特定列 即array 0 对于列表 检查 2D 元素是否在内部非常简单 one two in some list 然而 只是看看是否 one 存在需要迭代元素 即 one
  • pandas 基于独特的价值观和标准

    我有这个数据框 df in pd DataFrame id 123 123 123 123 123 456 ven group a a a b f f date 1 1 21 2 1 21 3 1 21 1 1 21 1 1 21 1 1
  • 输入数组而不知道其大小

    有没有一种方法可以在 Java 中创建一个数组 而无需先定义或询问其长度 又名用户输入一些数字作为参数 程序创建一个包含这么多参数的数组 有没有一种方法可以在java中创建一个数组 而无需先定义或询问它的长度 又名用户输入一些数字作为参数
  • 如何编写降序排序键函数?

    最近版本的 Python 中传递一个key功能为sort 从上一个cmp函数使我对某些对象执行复杂的排序变得更加困难 例如 我想使用一组字符串决胜字段对一组对象从最新到最旧进行排序 所以我希望日期按相反顺序排列 但字符串按自然顺序排列 使用
  • 如何在 symfony 4 中公开 LoggerInterface 服务

    我希望有Psr Log LoggerInterface在 symfony 中 public 以便能够直接从容器中获取它 container gt get Psr Log LoggerInterface 我尝试了以下方法services ya
  • 使用 SSLEngine (JSSE) 与旧客户端进行 SSL 握手

    这是 的后续问题 使用自签名证书和 SSLEngine JSSE 进行 SSL 握手 我已经实现了一个 NIO Web 服务器 可以在同一端口上处理 SSL 和非 SSL 消息 为了区分 SSL 和非 SSL 消息 我检查入站请求的第一个字
  • 如何使用InputStream从ZIP读取文件?

    我必须使用 SFTP 从 ZIP 存档 只有一个文件 我知道它的名称 获取文件内容 我唯一拥有的是 ZIPInputStream 大多数示例显示如何使用此语句获取内容 ZipFile zipFile new ZipFile location
  • 使用委托将数据传递回先前的 VC 并更新自定义单元

    我正在尝试传递数据BACK到上一个viewController使用代表 有谁知道如何从ViewController B to ViewController A 所以我想传递数据SecondVC to FirstVC并使用来自的数据更新自定义
  • 为什么我的 @Autowired 对象为空?

    我有以下 JSF 托管 bean package com example import java io Serializable import javax faces bean ManagedBean import org springfr
  • 如何在iPhone应用程序中显示不同的自定义阿拉伯字体?

    在我的应用程序中 我需要使用不同的自定义字体显示阿拉伯语文本 我按照场景添加ttf文件到info plist 根据上面的场景 我成功获得了不同字体样式的显示文本ENGLISH纯文本 我正在做同样的事情arabic字体样式 但在这里我没有得到
  • 关于值类型装箱的混乱

    在下面的代码中 int i 5 object o 5 Console WriteLine o prints 5 我有三个问题 1 获得了哪些附加 有用的功能5驻留在变量中o那5由变量表示i不具有 2 如果某些代码需要值类型 那么我们可以将
  • 我的 CSS 不会链接到我的 HTML 文件

    我正在尝试在 Sublime Text Editor 2 中构建一个简单的网站 但是 我的 CSS 文件不会链接到我的 HTML 文件 因此不会打印纯文本 我的 HTML 代码是
  • Angularjs - 控制器继承与范围继承

    下面是使用范围继承的代码
  • 立即执行时出现无效字符错误

    BEGIN exception when others then sqltext2 insert into ERROR TABLE SHREE select str from dual EXECUTE IMMEDIATE sqltext2
  • 如何在 WPF MVVM 中将组合框与外键绑定

    我知道关于数据绑定组合框有很多问题 也有很多教程 但我觉得这些教程很难 所以 我问这个问题 假设我的数据库中有两个表 Customer CustomerID Name GenderID 性别类型 GenderTypeID GenderTyp
  • 跨浏览器脚本使我的网站成为主页[重复]

    这个问题在这里已经有答案了 我有一个网站 我想要求用户将我的网站设为主页 如果他们单击 是 我想运行一个脚本 使我的网站成为用户浏览器的主页 有一个类似的主题在这里和一个解决方案here 但是 我的后一个链接中提供的解决方案仅适用于 IE
  • 用于密码验证的正则表达式

    我目前使用这个正则表达式来检查字符串是否符合一些条件 条件是 字符串长度必须介于 8 到 15 个字符之间 字符串必须至少包含一个数字 字符串必须至少包含一个大写字母 字符串必须至少包含一个小写字母 0 9 a zA Z a zA Z0 9
  • 使用 Paramiko 设置 SSH 隧道来访问 PostgreSQL

    我目前使用 Paramiko 访问 SFTP 服务器并连接到同一服务器上的 PostgreSQL 我发现很多例子使用sshtunnel登录 PostgreSQL 但我不知道如何用纯Paramiko 做到这一点 目前我的代码看起来像这样 es