盐堆。如何为每个服务器的每个用户创建 ssh 密钥并进行交换

Saltstack. How to create ssh keys per user per server and exchange it

如何在安装过程中为每个服务器的用户创建 ssh 私钥和 public 密钥,然后为不同服务器上的不同用户添加新创建的 public 密钥?

例如:

服务器 1

服务器 2

我知道如何创建密钥(public,私有),但如何在两个或多个服务器之间交换这些密钥?

如果您查看文档,您会发现 ssh_auth.present 状态。 https://docs.saltstack.com/en/latest/ref/states/all/salt.states.ssh_auth.html#salt.states.ssh_auth.present

为了动态填充授权密钥,我使用支柱数据作为事实来源。为了确保用户和他或她的 public 密钥位于适当的服务器上,我将使用盐状态,例如此示例:

cat /srv/salt/server_users.sls

{% set users = pillar.get('server_users') %}

{% for user in users %}

{{ user }}_setup:
  user.present

{{ user }}_sshkey:
  ssh_auth.present:
    - source: salt://pubkeys/{{ user }}.pub
    - user: {{ user }}

{% endfor }}

然后我将所有用户的 public 密钥放入 /srv/salt/pubkeys/ 目录。

在这一点上,我设置了平面文件支柱或外部支柱,这将为每个服务器提供一个 server_users 的支柱键,其值是我希望在该特定服务器上存在的用户列表并部署了 ssh 密钥。

平面文件支柱的示例如下所示。

cat /srv/pillar/top.sls

base:
  'server01':
    - users.server01
  'server02':
    - users.server02

cat /srv/pillar/users/server01.sls

server_users:
  - sarah
  - joe
  - kari
  - kanchan

cat /srv/pillar/users/server02.sls

server_users:
  - kanchan
  - john
  - sumit

所以在这个例子中,kanchan 可以访问两台服务器,而其他用户只能访问其中一台服务器。