/usr/bin/salt-key
#!/usr/bin/python
'''
Manage the authentication keys with salt-key
'''
from salt.scripts import salt_key
if __name__ == '__main__':
salt_key()
在scripts脚本中定义salt_key()函数
def salt_key():
'''
Manage the authentication keys with salt-key.
'''
try:
saltkey = salt.cli.SaltKey()
saltkey.run()
except KeyboardInterrupt:
raise SystemExit('\nExiting gracefully on Ctrl-c')
在/usr/lib/python2.6/site-packages/salt/cli/__init__.py中定义了SaltKey类
然后调用了/usr/lib/python2.6/site-packages/salt/utils/parsers.py
中的SaltKeyOptionParser类,在这个类中定义了有关salt-key命令的参数和描述信息等
最后调用了/usr/lib/python2.6/site-packages/salt/key.py中的KeyCLI类和Key类
class SaltKey(parsers.SaltKeyOptionParser):
'''
Initialize the Salt key manager
'''
def run(self):
'''
Execute salt-key
'''
self.parse_args()
if self.config['verify_env']:
verify_env_dirs = []
if not self.config['gen_keys']:
verify_env_dirs.extend([
self.config['pki_dir'],
os.path.join(self.config['pki_dir'], 'minions'),
os.path.join(self.config['pki_dir'], 'minions_pre'),
os.path.join(self.config['pki_dir'], 'minions_rejected'),
])
verify_env(
verify_env_dirs,
self.config['user'],
permissive=self.config['permissive_pki_access'],
pki_dir=self.config['pki_dir'],
)
if not self.config['log_file'].startswith(('tcp://',
'udp://',
'file://')):
# Logfile is not using Syslog, verify
verify_files(
[self.config['key_logfile']],
self.config['user']
)
self.setup_logfile_logger()
key = salt.key.KeyCLI(self.config)
if check_user(self.config['user']):
key.run()
Saltstack的Master和Minion之间使用AES加密算法进行通信。
使用 salt-key --help 可以查看salt-key可以使用的选项,这些也是在SaltKeyOptionParser类中定义的
salt-key --list all 列出所有的公钥
salt-key -A 接受所有发送过来的秘钥
salt-key -a 接受指定minion发送过来的公钥
转载于:https://blog.51cto.com/john88wang/1649575