postgresql设置免密登录

news/2024/7/9 21:57:18 标签: postgresql, 数据库

您提供的步骤描述了在 PostgreSQL 数据库环境中配置服务器间的 SSH 无密码登录和数据库用户认证的过程。这些步骤主要用于设置一个高可用性、负载平衡的数据库集群环境。让我们逐一解释这些步骤的目的和应用场景:

1. 启动 PostgreSQL 服务

systemctl start postgresql-13

这个命令用于启动 PostgreSQL 13 的服务。

2. 创建数据库角色

CREATE ROLE pgpool WITH LOGIN;
CREATE ROLE repl WITH REPLICATION LOGIN;

这些命令在 PostgreSQL 中创建了两个角色:pgpoolreplpgpool 用于连接池管理,而 repl 用于复制(replication)。

3. 设置 SSH 无密码登录

ssh-keygen -t rsa -f id_rsa_pgpool
ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
ssh-copy-id -i id_rsa_pgpool.pub postgres@server3

这些命令生成了一个 SSH 密钥对,并将公钥复制到集群中的其他服务器上。这允许 postgres 用户在不需要输入密码的情况下通过 SSH 访问集群中的其他服务器,这对于管理和自动化任务非常重要。

4. 配置 .pgpass 文件

vi /var/lib/pgsql/.pgpass

.pgpass 文件用于存储数据库连接的凭据,使得脚本和程序能够在不需交互输入密码的情况下连接到数据库
/var/lib/pgsql/.pgpass 文件用于存储 PostgreSQL 数据库的登录凭据,以便在不需要交互式输入密码的情况下自动登录。这个文件的每一行都包含一个数据库连接的凭据,格式如下:

hostname:port:database:username:password

每个字段的含义如下:

  1. hostname: 数据库服务器的主机名或IP地址。如果适用于所有主机,可以使用 * 代替。
  2. port: 数据库服务器监听的端口。如果适用于所有端口,可以使用 * 代替。
  3. database: 要连接的数据库名称。如果适用于所有数据库,可以使用 * 代替。
  4. username: 连接数据库的用户名。
  5. password: 用户名对应的密码。

例如,如果您想为用户 replserver1, server2, 和 server3 上的 replication 数据库配置自动登录,并且为 postgres 用户在这些服务器上的 postgres 数据库配置自动登录,您的 .pgpass 文件将如下所示:

server1:5432:replication:repl:repl_password
server2:5432:replication:repl:repl_password
server3:5432:replication:repl:repl_password
server1:5432:postgres:postgres:postgres_password
server2:5432:postgres:postgres:postgres_password
server3:5432:postgres:postgres:postgres_password

这里,repl_passwordpostgres_password 应该被替换为实际的密码。

安全注意事项:

  • .pgpass 文件应该被设置为仅由文件拥有者可读,使用命令 chmod 600 /var/lib/pgsql/.pgpass
  • 由于这个文件包含敏感信息,确保它的安全性非常重要。只有必要的用户和应用程序应该能够访问这个文件。
  • 在配置文件时要小心,避免在不安全的环境中泄露凭据。

应用场景

假设您正在设置一个由三个服务器(server1、server2、server3)组成的 PostgreSQL 集群,您可能需要进行以下操作:

  • 数据复制(Replication):使用 repl 角色在主服务器和备份服务器之间同步数据。
  • 负载平衡(Load Balancing):使用 pgpool 或其他工具分配查询负载,优化性能。
  • 自动化任务:例如,数据库备份、监控或其他维护任务,可以通过 SSH 无密码登录在服务器之间自动执行。

通过这些配置,您的数据库环境将支持高可用性和易于管理的特性,使得在出现故障或需要扩展时,您可以更加灵活和迅速地应对。

测试
ssh postgres@server1 -i ~/.ssh/id_rsa_pgpool ls /home

这个命令是在使用 SSH 连接到名为 server1 的服务器,并执行 ls /home 命令来列出 /home 目录的内容。让我们分解这个命令的各个部分:

  1. ssh postgres@server1: 这是一个 SSH 命令,用于通过网络从当前服务器(或计算机)连接到 server1。在这里,postgres 是你将要以其身份登录到 server1 的用户名。

  2. -i ~/.ssh/id_rsa_pgpool: 这个选项指定了私钥文件的位置,用于验证身份。-i 参数告诉 SSH 使用 ~/.ssh/id_rsa_pgpool 私钥文件进行身份验证,而不是默认的私钥文件。这个文件是之前生成的,用于设置无密码 SSH 访问的一部分。

  3. ls /home: 登录到 server1 之后,将执行的命令。ls 是一个列出目录内容的命令,在这种情况下,它被用来列出 server1/home 目录的内容。

总的来说,这个命令允许用户 postgres 使用指定的私钥文件远程登录到 server1,并在那里执行 ls /home 命令来查看 /home 目录中的文件和目录列表。这是远程服务器管理和自动化任务中常见的操作。


http://www.niftyadmin.cn/n/5253700.html

相关文章

机器学习与人工智能:一场革命性的变革

机器学习与人工智能:一场革命性的变革 人工智能的概述什么是机器学习定义解释 数据集结构机器学习应用场景 人工智能的概述 1956年8月,在美国汉诺斯小镇宁静的达特茅斯学院中,约翰麦卡锡(John McCarthy)、马文闵斯基&…

UDS诊断 10服务

文章目录 简介诊断会话切换请求和响应1、请求2、子功能3、肯定响应4、否定响应5、特殊的NRC 为什么划分不同会话报文示例UDS中常用 NRC参考 简介 10服务,即 Diagnostic Session Control(诊断会话控制)服务用于启用服务器中的不同诊断会话&am…

使用Git进行版本控制

参考:《Python编程从入门到实践》 前言1、安装、配置 Git1.1 在Linux系统中安装Git1.2 在OS X系统中安装Git1.3 在Windows系统中安装Git1.4 配置Git 2、创建项目3、忽略文件4、初始化仓库5、检查状态6、将文件加入到仓库中7、执行提交8、查看提交历史 前言 版本控制…

LabVIEW与Tektronix示波器实现电源测试自动化

LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域,自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器,开发一个自动化测试项目。该项目旨在自动…

【Socket】Unix环境下搭建简易本地时间获取服务

本文搭建一个Unix环境下的、局域网内的、简易的本地时间获取服务。 主要用于验证: 当TCP连接成功后,可以在两个线程中分别进行读操作、写操作动作当客户端自行终止连接后,服务端会在写操作时收到 SIGPIPE 信号当客户端执行shutdown写操作后&…

Linux C/C++并发编程实战(7)并发安全手段CAS机制

文章目录 CAS定义C接口 CAS定义 CAS,是Compare and Swap的简称。 CAS 操作涉及三个参数: 内存地址 V,旧的预期值 A新的值 B。 执行 CAS 操作时,首先比较内存地址 V 中的值与预期值 A 是否相等,如果相等&#xff0c…

【TiDB理论知识09】TiFlash

一 TiFlash架构 二 TiFlash 核心特性 TiFlash 主要有 异步复制、一致性、智能选择、计算加速 等几个核心特性。 1 异步复制 TiFlash 中的副本以特殊角色 (Raft Learner) 进行异步的数据复制,这表示当 TiFlash 节点宕机或者网络高延迟等状况发生时,Ti…

kubebuilder开发operator

安装kubebuilder前 需要有kubernetes环境和golang环境 官网:https://go.kubebuilder.io/ 安装kubebuilder #下载 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加权限 chmod x kubebuilder #放到环境变量里 mv k…