code: func (c *Communicator) Disconnect() error {
  	c.lock.Lock()
  	defer c.lock.Unlock()
  
  	if c.cancelKeepAlive != nil {
  		c.cancelKeepAlive()
  	}
  
  	if c.config.sshAgent != nil {
  		if err := c.config.sshAgent.Close(); err != nil {
  			return err
  		}
  	}
  
  	if c.conn != nil {
  		conn := c.conn
  		c.conn = nil
  		return conn.Close()
  	}
  
  	return nil
  }
docs: // Disconnect implementation of communicator.Communicator interface