我有一台服务器,它会不时自动更新一组特权文件(例如证书密钥、配置等)。它需要将这些文件保存在 LAN 上的其他系统上。我大致知道该怎么做,但不知道实施细节。
接收和保存文件的远程命令(在其他 LAN 服务器上运行)可以视为静态或很少更改,并且可以硬编码,这意味着它们非常适合与 SSH 授权密钥一起使用,但需要非常小心,因为它们接收和存储的文件仍然具有特权并保存到只有 root 才能读取的路径中。所涉及的系统都是 FreeBSD(+ 一个 OpenBSD)。
我设想了这样一个过程:
- 使用 生成密钥对
ssh-keygen
,适用于本地 SSH(不需要与任何公共网络或其他系统或功能配合使用)。 - 在所有系统上创建一个特权帐户
PRIV_USER
,除了通过 sshd 之外,该帐户根本没有访问权限(通常需要 su 权限,这对于固定脚本应该是安全的,或者至少需要对通常只能由 root 读取/写入的特定硬编码位置的写访问权限,因为它需要保存接收到的文件)。 - 在所有其他系统的 sshd 中设置一个授权密钥部分,当以 身份连接时
PRIV_USER
,会自动接收文件的 tar 存档并将其解压到本地文件系统,然后断开连接。 - 在发送系统上,当需要远程更新文件时,运行一个简短的脚本,该脚本创建要发送的文件的 tar 存档,然后依次连接到远程系统,
PRIV_USER
通过 SSH 发送文件,将成功/失败记录到控制台,然后退出。
我希望避免因为弄错而危及安全,我以前从未将授权密钥用于此目的,也不必为此目的生成自己的内部密钥对,也不必创建有限的特权帐户。因此,我可能会以多种方式犯下微妙的错误。
我应该使用哪些正确的命令来实现此功能的最基本的“不搞砸的”实现?:)
答案1
- ssh-keygen 创建本地密钥
- 创建新的服务器
- ssh-copy-id 至 root@newserver
- 创建所需配置的 ansible playbook 存储库(仅包括 sshd 密码)
- 跑步
ansible-playbook