2 # vim:set ts=4 sw=4 expandtab:
7 # NodeManager plugin to create special accounts
10 Have NM create/populate accounts/ssh keys for special persons such as root, site_admin, etc.
25 # right after conf_files
28 def start(options, conf):
29 logger.log("personkeys: plugin starting up...")
31 def GetSlivers(data, conf = None, plc = None):
32 if 'accounts' not in data:
33 logger.log_missing_data("specialaccounts.GetSlivers",'accounts')
36 for account in data['accounts']:
37 name = account['name']
38 new_keys = account['keys']
40 logger.log('specialaccounts: dealing with account %s'%name)
42 # look up account name, which must exist
43 pw_info = pwd.getpwnam(name)
48 # populate account's .ssh/authorized_keys file
49 dot_ssh = os.path.join(pw_dir,'.ssh')
50 if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
51 auth_keys = os.path.join(dot_ssh,'authorized_keys')
53 logger.log("specialaccounts: new keys = %s" % auth_keys)
54 fd, fname = tempfile.mkstemp('','authorized_keys',dot_ssh)
61 if os.path.exists(auth_keys): os.unlink(auth_keys)
62 os.rename(fname, auth_keys)
64 # set permissions properly
65 os.chmod(dot_ssh, 0700)
66 os.chown(dot_ssh, uid,gid)
67 os.chmod(auth_keys, 0600)
68 os.chown(auth_keys, uid,gid)
70 logger.log('specialacounts: installed ssh keys for %s' % name)