VMware ESXi enable remote ssh access (unsupported)

To enable VMware ESXi 4.0 SSH (Windows Putty) access:

  • At physical console press ALT+F1. VMware ESXi banner will appear.
  • There is no prompt on the screen, but type ‘unsupported’ and press Enter.
  • Now at password prompt type root password.
  • You are logged in Linux console. Type:

vi /etc/inetd.conf

  • Locate line with commented SSH – ‘#ssh tcp …’, and uncomment it – delete ‘#’. (Press Insert to go into edit mode, delete ‘#’, press Esc to go back, type ‘:wq’ to save and quit.
  • Now you can restart server, or restart services using:

/sbin/services.sh restart

Tested on VMware ESXi 4.0.

VMware ESXi unsupported console

By default ESXi does not support console. To enable it you must be at physical terminal (screen & keyboard).

Press ALT+F1 and type “unsupported”. Then at the Password prompt type root password.

You are in.

Tested on ESXi 4.0 @ Dell PowerEdge 2950.

Make asynchronous call in PHP using PHP socket and custom User agent string

Recently I wrote about async calls in PHP. In the provided example from w-shadow.com there is one thing missing – User agent string.

Changing User agent string to something unique is handy, when analyzing log file. You can see, if someone is messing with your hidden asynchronous PHP script.

Here is an example, that uses PHP socket to make async call:

function backgroundPost($url){
  $parts=parse_url($url);
 
  $fp = fsockopen($parts[‘host’],
          isset($parts[‘port’])?$parts[‘port’]:80,
          $errno, $errstr, 30);
 
  if (!$fp) {
      return false;
  } else {
      $out = "POST ".$parts[‘path’]." HTTP/1.1\r\n";
      $out.= "Host: ".$parts[‘host’]."\r\n";
      $out.= "User-Agent: WishMesh.com custom user agent. Not Gecko!\r\n";
      $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
      $out.= "Content-Length: ".strlen($parts[‘query’])."\r\n";
      $out.= "Connection: Close\r\n\r\n";
      if (isset($parts[‘query’])) $out.= $parts[‘query’];
 
      fwrite($fp, $out);
      fclose($fp);
      return true;
  }
}
 
//Example of use
backgroundPost(‘http://example.com/slow_async_script.php?id=’.
                urlencode(‘file.txt’));

Don’t forget to change “User-Agent” to something more meaningful for you.

The function backgroundPost opens TCP/IP connection to specified $url and makes HTTP POST. Right after data is submitted to the server, we close connection using fclose function, but the background script keeps running. If the background script is on the same server, we have two PHP scripts running simultaneously.

As suggested in the w-shadow.com I use ignore_user_abort(true); in the slow_async_script.php, so that PHP or Apache keep my script running even after we have aborted connection to it (using socket close command fclose).