in google_guest_agent/oslogin.go [126:199]
func (o *osloginMgr) Set(ctx context.Context) error {
// We need to know if it was previously enabled for the clearing of
// metadata-based SSH keys.
oldEnable, _, _, _ := getOSLoginEnabled(oldMetadata)
enable, twofactor, skey, reqCerts := getOSLoginEnabled(newMetadata)
cleanupDeprecatedDirectives()
if enable && !oldEnable {
logger.Infof("Enabling OS Login")
newMetadata.Instance.Attributes.SSHKeys = nil
newMetadata.Project.Attributes.SSHKeys = nil
(&accountsMgr{}).Set(ctx)
}
if !enable && oldEnable {
logger.Infof("Disabling OS Login")
}
if err := writeSSHConfig(enable, twofactor, skey, reqCerts); err != nil {
logger.Errorf("Error updating SSH config: %v.", err)
}
if err := writeNSSwitchConfig(enable); err != nil {
logger.Errorf("Error updating NSS config: %v.", err)
}
if err := writePAMConfig(enable, twofactor); err != nil {
logger.Errorf("Error updating PAM config: %v.", err)
}
if err := writeGroupConf(enable); err != nil {
logger.Errorf("Error updating group.conf: %v.", err)
}
for _, svc := range []string{"nscd", "unscd", "systemd-logind", "cron", "crond"} {
// These services should be restarted if running
logger.Debugf("systemctl try-restart %s, if it exists", svc)
if err := systemctlTryRestart(ctx, svc); err != nil {
logger.Errorf("Error restarting service: %v.", err)
}
}
// SSH should be started if not running, reloaded otherwise.
for _, svc := range []string{"ssh", "sshd"} {
logger.Debugf("systemctl reload-or-restart %s, if it exists", svc)
if err := systemctlReloadOrRestart(ctx, svc); err != nil {
logger.Errorf("Error reloading service: %v.", err)
}
}
now := fmt.Sprintf("%d", time.Now().Unix())
mdsClient.WriteGuestAttributes(ctx, "guest-agent/sshable", now)
if enable {
logger.Debugf("Create OS Login dirs, if needed")
if err := createOSLoginDirs(ctx); err != nil {
logger.Errorf("Error creating OS Login directory: %v.", err)
}
logger.Debugf("create OS Login sudoers config, if needed")
if err := createOSLoginSudoersFile(); err != nil {
logger.Errorf("Error creating OS Login sudoers file: %v.", err)
}
logger.Debugf("starting OS Login nss cache fill")
if err := run.Quiet(ctx, "google_oslogin_nss_cache"); err != nil {
logger.Errorf("Error updating NSS cache: %v.", err)
}
}
return nil
}