/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发送过来的公钥