47 lines
1.8 KiB
Python
Executable file
47 lines
1.8 KiB
Python
Executable file
#!/usr/bin/env python2
|
|
|
|
import os, sys, argparse, boto.ec2
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Searches instance IP and connects via SSH')
|
|
parser.add_argument('-p', type=int, default=22, metavar='port', help='Port to connect to (default 22)')
|
|
parser.add_argument('-u', type=str, default=None, metavar='user', help='User to use for connection (default current username)')
|
|
parser.add_argument('instance_id', type=str, help='ID of the instance in format "i-XXXXX"')
|
|
args = parser.parse_args()
|
|
|
|
if None in [os.getenv('EC2_REGION'), os.getenv('AWS_ACCESS_KEY_ID'), os.getenv('AWS_SECRET_ACCESS_KEY')]:
|
|
print 'Please provide these environment variables: EC2_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY'
|
|
sys.exit(1)
|
|
|
|
if os.getenv('EC2_REGION') not in [r.name for r in boto.ec2.regions()]:
|
|
print 'Region "{}" derived from environment variable EC2_REGION is not a valid region.'.format(os.getenv('EC2_REGION'))
|
|
sys.exit(1)
|
|
|
|
ec2_connection = boto.ec2.connect_to_region(os.getenv('EC2_REGION'),
|
|
aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
|
|
aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'))
|
|
|
|
instances = ec2_connection.get_only_instances([args.instance_id])
|
|
if len(instances) != 1:
|
|
print 'Did not found a single instance for ID {}'.format(args.instance_id)
|
|
sys.exit(1)
|
|
instance = instances[0]
|
|
|
|
if instance.private_ip_address is not None:
|
|
_call_ssh(instance.private_ip_address, args.u, args.p)
|
|
else:
|
|
_call_ssh(instance.ip_address, args.u, args.p)
|
|
|
|
def _call_ssh(ip, user=None, port=None):
|
|
args = ['/usr/bin/ssh']
|
|
if port is not None:
|
|
args.append('-p {}'.format(port))
|
|
if user is not None:
|
|
args.append('{}@{}'.format(user, ip))
|
|
else:
|
|
args.append('{}'.format(ip))
|
|
|
|
os.execv('/usr/bin/ssh', args)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|