跳过正文
Background Image
  1. PostgreSQL大法师/

批量配置SSH免密登录

·539 字·2 分钟· ·
冯若航
作者
冯若航
Pigsty 创始人, @Vonng
目录

配置SSH是运维工作的基础,有时候还是要老生常谈一下。


生成公私钥对
#

理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。

首先,使用ssh-keygen生成公私钥对

ssh-keygen -t rsa

注意权限问题,ssh内文件的权限应当设置为0600.ssh目录的权限应当设置为0700,设置失当会导致免密登录无法使用。


配置ssh config穿透跳板机
#

User换成自己的名字。放入.ssh/config,这里给出了有跳板机环境下配置生产网数据库免密直连的方式:

# Vonng's ssh config

# SpringBoard IP
Host <BastionIP>
	Hostname <your_ip_address>
	IdentityFile ~/.ssh/id_rsa

# Target Machine Wildcard (Proxy via Bastion)
Host 10.xxx.xxx.*
	ProxyCommand ssh <BastionIP> exec nc %h %p 2>/dev/null
	IdentityFile ~/.ssh/id_rsa

# Common Settings
Host *
	User xxxxxxxxxxxxxx
	PreferredAuthentications publickey,password
	Compression yes
	ServerAliveInterval 30
	ControlMaster auto
	ControlPath ~/.ssh/ssh-%r@%h:%p
	ControlPersist yes
	StrictHostKeyChecking no

将公钥拷贝到目标机器上
#

然后将公钥拷贝到跳板机,DBA工作机,所有数据库机器上。

ssh-copy-id <target_ip>

每次执行此命令都会要求输入密码,非常繁琐无聊,可以通过expect 脚本进行自动化,或者使用sshpass


使用expect自动化
#

将下列脚本中的<your password>替换为你自己的密码。如果服务器IP列表有变化,修改列表即可。

#!/usr/bin/expect
foreach id { 
     10.xxx.xxx.xxx
     10.xxx.xxx.xxx
     10.xxx.xxx.xxx
} {
    spawn ssh-copy-id $id
    expect {
    	"*(yes/no)?*"
    	{
            send "yes\n"
            expect "*assword:" { send "<your password>\n"}
    	}
     	"*assword*" { send "<your password>\n"}
    }
}

exit

更优雅的解决方案: sshpass
#

sshpass -i <your password> ssh-copy-id <target address>

当然缺点是,密码很有可能出现在bash历史记录中,执行完请及时清理痕迹。

相关文章

Wireshark抓包分析协议
·2014 字·5 分钟
Wireshark是一个很有用的工具,特别适合用来分析网络协议,这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。
file_fdw妙用无穷——从数据库读取系统信息
·1457 字·3 分钟
通过file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。
Linux 常用统计 CLI 工具
·4377 字·9 分钟
top, free, vmstat, iostat:四大常用 CLI 工具命令速查
源码编译安装 PostGIS
·1527 字·4 分钟
PostGIS是PG的杀手锏插件,但编译安装可不容易。
PostgreSQL MongoFDW安装部署
·1634 字·4 分钟
最近有业务要求通过PostgreSQL FDW去访问MongoDB,但是,MongoDB FDW 编译起来真是要人命啊。
Go数据库教程:database/sql
·9117 字·19 分钟
同JDBC类似,Go也有标准的数据库访问接口。本文详细介绍了Go 语言中 database/sql的使用方法和注意事项。