code: func (c *SSHTunneler) Run(getAddresses AddressFunc) {
  	if c.stopChan != nil {
  		return
  	}
  	c.stopChan = make(chan struct{})
  
  	// Save the address getter
  	if getAddresses != nil {
  		c.getAddresses = getAddresses
  	}
  
  	// Usernames are capped @ 32
  	if len(c.SSHUser) > 32 {
  		klog.Warning("SSH User is too long, truncating to 32 chars")
  		c.SSHUser = c.SSHUser[0:32]
  	}
  	klog.Infof("Setting up proxy: %s %s", c.SSHUser, c.SSHKeyfile)
  
  	// public keyfile is written last, so check for that.
  	publicKeyFile := c.SSHKeyfile + ".pub"
  	exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, publicKeyFile)
  	if err != nil {
  		klog.Errorf("Error detecting if key exists: %v", err)
  	} else if !exists {
  		klog.Infof("Key doesn't exist, attempting to create")
  		if err := generateSSHKey(c.SSHKeyfile, publicKeyFile); err != nil {
  			klog.Errorf("Failed to create key pair: %v", err)
  		}
  	}
  
  	c.tunnels = ssh.NewSSHTunnelList(c.SSHUser, c.SSHKeyfile, c.HealthCheckURL, c.stopChan)
  	// Sync loop to ensure that the SSH key has been installed.
  	c.lastSSHKeySync = c.clock.Now().Unix()
  	c.installSSHKeySyncLoop(c.SSHUser, publicKeyFile)
  	// Sync tunnelList w/ nodes.
  	c.lastSync = c.clock.Now().Unix()
  	c.nodesSyncLoop()
  }
docs: // Run establishes tunnel loops and returns