title: Can't get amazon cmd shell to work through boto
body: <p>I'm trying to create an instance and login to the server using ssh, I'm following an example from a book:</p>
  
  <pre><code>import os
  import time
  import boto
  import boto.manage.cmdshell
  
  def launch_instance(ami="ami-54cf5c3d",
                      instance_type="t1.micro",
                      key_name="paws",
                      key_extension=".pem",
                      key_dir="~/.ssh",
                      group_name="paws",
                      ssh_port="22",
                      cidr="0.0.0.0/0",
                      tag="paws",
                      user_data=None,
                      cmd_shell=True,
                      login_user="ec2-user",
                      ssh_passwd=None):
  
      cmd=None
      ec2 = boto.connect_ec2() # Crededentials are stored in /etc/boto.cfg
  
      try:
          ec2.get_all_key_pairs(keynames=[key_name])[0]
      except ec2.ResponseError, e:
          if e.code == 'InvalidKeyPair.NotFound':
              print 'Creating keypair %s' % key_name
              key = ec2.create_key_pair(key_name)
              key.save(key_dir)
          else:
              raise
  
      try:
          group = ec2.get_all_security_groups(groupnames=[group_name])[0]
      except ec2.ResponseError, e:
          if e.code == 'InvalidGroup.NotFound':
              print 'Creating security group %s' % group_name
              group = ec2.create_security_group(group_name,
                                                'A group that allows SSH access')
          else:
              raise
  
      try:
          group.authorize('tcp',ssh_port,ssh_port,cidr)
      except ec2.ResponseError, e:
          if e.code == 'InvalidPermission.Duplicate':
              print 'Security group %s already authorized' % group_name
          else:
              raise
  
      reservation = ec2.run_instances(ami,
                                      key_name=key_name,
                                      security_groups=[group_name],
                                      instance_type=instance_type,
                                      user_data=user_data)
      instance = reservation.instances[0]
  
      print 'waiting for instance...'
      while instance.state != 'running':
          time.sleep(5)
          instance.update()
      print 'Instance is now running' 
      print 'Instance IP is %s' % instance.ip_address
  
      instance.add_tag(tag)
  
      if cmd_shell:
          key_path = os.path.join(os.path.expanduser(key_dir),
                                  key_name + key_extension)
          cmd = boto.manage.cmdshell.sshclient_from_instance(instance,
                                                             key_path,
                                                             user_name=login_user)
  
      return (instance, cmd)
  
  
  launch_instance()  
  </code></pre>
  
  <p>and that's the output I'm getting:</p>
  
  <pre><code>root@johntheripper-PORTEGE-Z835:~/boto# python ec2_launch_test.py 
  Security group paws already authorized
  waiting for instance...
  Instance is now running
  SSH Connection refused, will retry in 5 seconds
  SSH Connection refused, will retry in 5 seconds
  SSH Connection refused, will retry in 5 seconds
  SSH Connection refused, will retry in 5 seconds
  SSH Connection refused, will retry in 5 seconds
  Could not establish SSH connection
  </code></pre>
  
  <p>As you can see from the last line, that something wrong, I was thinking about permission, but even if I run it as a root, nothing changes.</p>
  
  <p>However I'm able to connect to this instance through <code>ssh -i ........ ec2-user@.....</code>
  Can you please point me what I'm doing wrong?</p>