盐堆。如何为每个服务器的每个用户创建 ssh 密钥并进行交换
Saltstack. How to create ssh keys per user per server and exchange it
如何在安装过程中为每个服务器的用户创建 ssh 私钥和 public 密钥,然后为不同服务器上的不同用户添加新创建的 public 密钥?
例如:
服务器 1
- user1 在 authorized_keys 中有 public 键 - server1(user2,user3),server2(user1,user2,user3)
- user2 在 authorized_keys 中有 public 键 - server1(user1,user3),server2(user1,user2,user3)
- user3 在 authorized_keys 中有 public 键 - server1(user1,user2),server2(user1,user2,user3)
服务器 2
- user1 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user2,user3)
- user2 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user1,user3)
- user3 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user1,user2)
我知道如何创建密钥(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 可以访问两台服务器,而其他用户只能访问其中一台服务器。
如何在安装过程中为每个服务器的用户创建 ssh 私钥和 public 密钥,然后为不同服务器上的不同用户添加新创建的 public 密钥?
例如:
服务器 1
- user1 在 authorized_keys 中有 public 键 - server1(user2,user3),server2(user1,user2,user3)
- user2 在 authorized_keys 中有 public 键 - server1(user1,user3),server2(user1,user2,user3)
- user3 在 authorized_keys 中有 public 键 - server1(user1,user2),server2(user1,user2,user3)
服务器 2
- user1 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user2,user3)
- user2 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user1,user3)
- user3 在 authorized_keys 中有 public 键 - server1(user1,user2,user3),server2(user1,user2)
我知道如何创建密钥(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 可以访问两台服务器,而其他用户只能访问其中一台服务器。