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