cfg/bin/issh
2016-07-21 16:29:54 +02:00

48 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()