Skip to content

Instantly share code, notes, and snippets.

@yoloseem
Created March 15, 2018 06:04
Show Gist options
  • Save yoloseem/656c38afdc41747109f2ca52d59685d0 to your computer and use it in GitHub Desktop.
Save yoloseem/656c38afdc41747109f2ca52d59685d0 to your computer and use it in GitHub Desktop.
ec2 ssh

Dependency:

  • boto3 and AWS credential configured on your local
  • colored

Usage:

  • $ python ech.py server-name

More simple usage:

  • Rename ech.py to ech and move it to ~/bin or somewhere listed in your $PATH.
  • $ ech server-name
#!/home/hj/bin/python
import os
import sys
import textwrap
import boto3
from colored import fg, attr
def find_tag(tags, name):
for tag in tags:
if tag['Key'] == name:
return tag['Value']
return None
if __name__ == '__main__':
name = sys.argv[1]
instances = list(boto3.resource('ec2')\
.instances\
.filter(Filters=[
{'Name': 'instance-state-name', 'Values': ['running']},
{'Name': 'tag:Name', 'Values': [f'*{name}*']}
]))
instances.sort(key=lambda i: find_tag(i.tags, 'Name'))
if not instances:
print('Not found')
sys.exit(1)
longest_name_length = max(len(find_tag(i.tags, 'Name')) for i in instances)
name_fmt = '{:%ds}' % longest_name_length
for i, instance in enumerate(instances):
instance_name = find_tag(instance.tags, 'Name')
print(
fg('dark_olive_green_3b'),
f'{i:2d}.',
name_fmt.format(instance_name),
attr('reset'),
fg('light_green_3'),
instance.instance_type,
attr('reset'),
'\t',
instance.public_ip_address,
'\n ',
fg('dark_green_sea'),
instance.public_dns_name,
attr('reset'),
)
idx = 0
if len(instances) > 1:
idx = input('Type #: ')
try:
idx = int(idx)
except ValueError:
print('Invalid input')
sys.exit(1)
chosen = instances[idx]
chosen_name = find_tag(chosen.tags, 'Name')
print(
'\n',
'Connecting to ',
fg('light_green_3'), attr('bold'),
f'{chosen_name}',
attr('reset'), '\n',
f' Id:\t\t{chosen.id}\n',
f' Public:\t{chosen.public_ip_address}\n',
f' Private:\t{chosen.private_ip_address}\n',
attr('reset'),
)
command = f'ssh ubuntu@{chosen.public_dns_name}'
os.system(command)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment