From 5028e0797fd9781b9a2538092316b3349f66c208 Mon Sep 17 00:00:00 2001 From: idan Date: Mon, 25 Oct 2021 15:33:25 +0300 Subject: [PATCH 01/11] test - commit from ide --- main.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.py b/main.py index 1c3070e..c02bc1b 100644 --- a/main.py +++ b/main.py @@ -47,3 +47,6 @@ scanner.scan_and_report(ec2_instance_public_ip=ec2_instance_public_ip, report_service_port=report_service_port, ec2_instance_id=ec2_instance_id, snapshot_id=snapshot_id) + +# running in terminal with: +# python3 main.py --region us-east-2 --instance-id i-0a70851a2af9eec29 --keypair idan15 --log-level INFO From ba98b807fd67a85c78a6d4eab2ab3297d71b240a Mon Sep 17 00:00:00 2001 From: idan Date: Mon, 25 Oct 2021 17:42:24 +0300 Subject: [PATCH 02/11] In progress of fixing the key pair issue (os-47). --- main.py | 7 ++++--- src/scanner.py | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index c02bc1b..3732a60 100644 --- a/main.py +++ b/main.py @@ -37,11 +37,12 @@ volume_id, selected_az, snapshot_id = snapper.snapshot2volume(volume_id=source_volume_id) - scanner = Scanner(logger=logger, region=snapper.region) if cmd_args.keypair: - scanner.keypair_name = cmd_args.keypair + scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=cmd_args.keypair) else: + scanner = Scanner(logger=logger, region=snapper.region, key_pair_name="red_detector_key") scanner.keypair_name = scanner.create_keypair(key_name='red_detector_key') + ec2_instance_id, ec2_instance_public_ip, report_service_port = scanner.create_ec2(selected_az=selected_az) scanner.attach_volume_to_ec2(ec2_instance_id=ec2_instance_id, volume_id=volume_id) scanner.scan_and_report(ec2_instance_public_ip=ec2_instance_public_ip, @@ -49,4 +50,4 @@ snapshot_id=snapshot_id) # running in terminal with: -# python3 main.py --region us-east-2 --instance-id i-0a70851a2af9eec29 --keypair idan15 --log-level INFO +# python3 main.py --region us-east-2 --instance-id i-0a70851a2af9eec29 --keypair idan15 --log-level INFO \ No newline at end of file diff --git a/src/scanner.py b/src/scanner.py index 108831e..7bd97ed 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -12,9 +12,10 @@ class Scanner: - def __init__(self, logger, region): + def __init__(self, logger, region, key_pair_name="red_detector_key"): self.logger = logger self.region = region + self.key_pair_name = key_pair_name self.client = boto3.client('ec2', region_name=region) self.ec2 = boto3.resource('ec2', region_name=region) self.keypair_name = None @@ -31,7 +32,7 @@ def create_keypair(self, key_name='red_detector_key'): self.logger.error(f"create key pair: {err}") exit(99) self.logger.info(f'creating key pair: "red_detector_key"') - with open('red_detector_key.pem', 'w') as f: + with open('red_detector_key.pem', 'w') as f: # NEED TO OPEN A LOCAL FILE FOR "OLD" KEY PAIR TOO. f.write(new_keypair.key_material) return key_name @@ -137,7 +138,7 @@ def create_ec2(self, selected_az): MinCount=1, MaxCount=1, InstanceType='t2.large', - KeyName=self.keypair_name, + KeyName=self.key_pair_name, UserData=user_data, SecurityGroupIds=[ security_group_id, @@ -208,7 +209,8 @@ def attach_volume_to_ec2(self, ec2_instance_id, volume_id): def scan_and_report(self, ec2_instance_public_ip, report_service_port, ec2_instance_id, snapshot_id): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - privet_key = paramiko.RSAKey.from_private_key_file("red_detector_key.pem") + privet_key = paramiko.RSAKey.from_private_key_file(self.key_pair_name) # the error came from here: assuming key + # pair didn't inserted? connect = 0 while not connect: try: From 14ccd6f7cddfa9813905cdb5c252414afe4008c4 Mon Sep 17 00:00:00 2001 From: idan Date: Wed, 27 Oct 2021 16:35:38 +0300 Subject: [PATCH 03/11] fixed (os-47). --- main.py | 2 -- src/scanner.py | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 3732a60..7891d3a 100644 --- a/main.py +++ b/main.py @@ -49,5 +49,3 @@ report_service_port=report_service_port, ec2_instance_id=ec2_instance_id, snapshot_id=snapshot_id) -# running in terminal with: -# python3 main.py --region us-east-2 --instance-id i-0a70851a2af9eec29 --keypair idan15 --log-level INFO \ No newline at end of file diff --git a/src/scanner.py b/src/scanner.py index 7bd97ed..e3d6ace 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -209,8 +209,8 @@ def attach_volume_to_ec2(self, ec2_instance_id, volume_id): def scan_and_report(self, ec2_instance_public_ip, report_service_port, ec2_instance_id, snapshot_id): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - privet_key = paramiko.RSAKey.from_private_key_file(self.key_pair_name) # the error came from here: assuming key - # pair didn't inserted? + privet_key = paramiko.RSAKey.from_private_key_file(self.key_pair_name+".pem") + # the error came from the line above: assuming key pair didn't inserted? connect = 0 while not connect: try: From 9d3d43215602af112fa4df62c819d5b2e91c5f30 Mon Sep 17 00:00:00 2001 From: idan Date: Wed, 27 Oct 2021 17:32:38 +0300 Subject: [PATCH 04/11] fixed (os-47)+. --- main.py | 9 +++++---- src/scanner.py | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 7891d3a..b2485c1 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import argparse from art import text2art - +import random from src.logger import setup_logger from src.snapper import Snapper from src.scanner import Scanner @@ -40,12 +40,13 @@ if cmd_args.keypair: scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=cmd_args.keypair) else: - scanner = Scanner(logger=logger, region=snapper.region, key_pair_name="red_detector_key") - scanner.keypair_name = scanner.create_keypair(key_name='red_detector_key') + rand = str(random.randrange(10000)) # need to give a not taken name when creating new key pair. + key_name = "red_detector_key{random_number}".format(random_number=rand) + scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=key_name) + scanner.keypair_name = scanner.create_keypair(key_name=key_name) ec2_instance_id, ec2_instance_public_ip, report_service_port = scanner.create_ec2(selected_az=selected_az) scanner.attach_volume_to_ec2(ec2_instance_id=ec2_instance_id, volume_id=volume_id) scanner.scan_and_report(ec2_instance_public_ip=ec2_instance_public_ip, report_service_port=report_service_port, ec2_instance_id=ec2_instance_id, snapshot_id=snapshot_id) - diff --git a/src/scanner.py b/src/scanner.py index e3d6ace..72c82a2 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -12,7 +12,7 @@ class Scanner: - def __init__(self, logger, region, key_pair_name="red_detector_key"): + def __init__(self, logger, region, key_pair_name): self.logger = logger self.region = region self.key_pair_name = key_pair_name @@ -20,19 +20,19 @@ def __init__(self, logger, region, key_pair_name="red_detector_key"): self.ec2 = boto3.resource('ec2', region_name=region) self.keypair_name = None - def create_keypair(self, key_name='red_detector_key'): + def create_keypair(self, key_name): try: new_keypair = self.ec2.create_key_pair(KeyName=key_name) except ClientError as err: if err.response["Error"]["Code"] == "InvalidKeyPair.Duplicate": self.logger.warning(f"key pair: {key_name} already exists.") - val = input("use the existing keypair?[Y/N]\n") + val = input("use the existing keypair?[Y/N] (if using the same keypair- you need to provide it as local pem file in the folder.)\n") if val.lower() == "y": return key_name self.logger.error(f"create key pair: {err}") exit(99) - self.logger.info(f'creating key pair: "red_detector_key"') - with open('red_detector_key.pem', 'w') as f: # NEED TO OPEN A LOCAL FILE FOR "OLD" KEY PAIR TOO. + self.logger.info('creating key pair: {red_detector_key}'.format(red_detector_key=self.key_pair_name)) + with open(self.key_pair_name+'.pem', 'w') as f: # NEED TO OPEN A LOCAL FILE FOR "OLD" KEY PAIR TOO. f.write(new_keypair.key_material) return key_name From 106ca9dfda29d3d25146c5ba0b0ee6118c6b426e Mon Sep 17 00:00:00 2001 From: idan Date: Sun, 31 Oct 2021 18:32:20 +0200 Subject: [PATCH 05/11] fixed (os-47). --- src/scanner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/scanner.py b/src/scanner.py index 72c82a2..3f89ce6 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -210,7 +210,6 @@ def scan_and_report(self, ec2_instance_public_ip, report_service_port, ec2_insta ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) privet_key = paramiko.RSAKey.from_private_key_file(self.key_pair_name+".pem") - # the error came from the line above: assuming key pair didn't inserted? connect = 0 while not connect: try: From fbf62d2265aca081c42c931878c8e4e65caf5d3c Mon Sep 17 00:00:00 2001 From: idan Date: Sun, 31 Oct 2021 18:34:25 +0200 Subject: [PATCH 06/11] fixed (os-47). --- main.py | 2 +- src/scanner.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index b2485c1..19d48ea 100644 --- a/main.py +++ b/main.py @@ -40,7 +40,7 @@ if cmd_args.keypair: scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=cmd_args.keypair) else: - rand = str(random.randrange(10000)) # need to give a not taken name when creating new key pair. + rand = str(random.randrange(10000)) # need to give an unused name when creating new key pair. key_name = "red_detector_key{random_number}".format(random_number=rand) scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=key_name) scanner.keypair_name = scanner.create_keypair(key_name=key_name) diff --git a/src/scanner.py b/src/scanner.py index 3f89ce6..7cdd184 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -26,7 +26,7 @@ def create_keypair(self, key_name): except ClientError as err: if err.response["Error"]["Code"] == "InvalidKeyPair.Duplicate": self.logger.warning(f"key pair: {key_name} already exists.") - val = input("use the existing keypair?[Y/N] (if using the same keypair- you need to provide it as local pem file in the folder.)\n") + val = input("use the existing keypair?[Y/N] \n") if val.lower() == "y": return key_name self.logger.error(f"create key pair: {err}") From 7d8c484a6232c8417097f63dd4e4ae24512e40b3 Mon Sep 17 00:00:00 2001 From: IdanR-lighspin <90135915+IdanR-lighspin@users.noreply.github.com> Date: Mon, 1 Nov 2021 17:11:47 +0200 Subject: [PATCH 07/11] removing random for new keypair name --- main.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 19d48ea..ed73335 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,22 @@ import argparse from art import text2art import random +import boto3 from src.logger import setup_logger from src.snapper import Snapper from src.scanner import Scanner + +def used_key_pairs(): + keypairs = [] # list of used keyPair names + ec2 = boto3.client('ec2') + response = ec2.describe_key_pairs() + + for i in response["KeyPairs"]: + keypairs.append(i["KeyName"]) + return keypairs + + if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--region', action='store', dest='region', type=str, @@ -40,8 +52,14 @@ if cmd_args.keypair: scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=cmd_args.keypair) else: - rand = str(random.randrange(10000)) # need to give an unused name when creating new key pair. - key_name = "red_detector_key{random_number}".format(random_number=rand) + used_key_pairs_list = used_key_pairs() + num = 0 + key_name = "red_detector_key{number}".format(number=str(num)) + while key_name in used_key_pairs_list: + num += 1 + key_name = "red_detector_key{number}".format(number=str(num)) + + scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=key_name) scanner.keypair_name = scanner.create_keypair(key_name=key_name) From 6f4d853fc4d9488bd7ebb827799a320a720d7981 Mon Sep 17 00:00:00 2001 From: IdanR-lightspin <90135915+IdanR-lighspin@users.noreply.github.com> Date: Fri, 12 Nov 2021 14:58:20 +0200 Subject: [PATCH 08/11] Update main.py --- main.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index ed73335..2b93323 100644 --- a/main.py +++ b/main.py @@ -2,11 +2,29 @@ from art import text2art import random import boto3 +import os +import glob from src.logger import setup_logger from src.snapper import Snapper from src.scanner import Scanner +def getting_all_pem_file_names(): + """ + :return: .pem file names from the red-detector directory. + """ + file_path = os.path.realpath(__file__) # getting the script's path + file_path = file_path.split("red-detector") + files_path = file_path[0] + "red-detector" # (the pem files arent in the same directory as the script.) + + lst = (glob.glob(files_path+"/*.pem")) + index = 0 + for i in lst: + lst[index] = lst[index].replace(files_path+"/", "").replace(".pem","") + index += 1 + return lst + + def used_key_pairs(): keypairs = [] # list of used keyPair names ec2 = boto3.client('ec2') @@ -52,14 +70,14 @@ def used_key_pairs(): if cmd_args.keypair: scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=cmd_args.keypair) else: - used_key_pairs_list = used_key_pairs() + used_key_pairs_list_from_aws = used_key_pairs() + used_key_pairs_list_locally = getting_all_pem_file_names() num = 0 key_name = "red_detector_key{number}".format(number=str(num)) - while key_name in used_key_pairs_list: + while key_name in used_key_pairs_list_from_aws or key_name in used_key_pairs_list_locally: num += 1 key_name = "red_detector_key{number}".format(number=str(num)) - scanner = Scanner(logger=logger, region=snapper.region, key_pair_name=key_name) scanner.keypair_name = scanner.create_keypair(key_name=key_name) From b2150bceaac1381fae4851ebb7d1f5e4a9564521 Mon Sep 17 00:00:00 2001 From: idan Date: Mon, 15 Nov 2021 09:12:50 +0200 Subject: [PATCH 09/11] fixed little issue (OS-47) --- main.py | 1 + src/scanner.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 2b93323..a658a79 100644 --- a/main.py +++ b/main.py @@ -36,6 +36,7 @@ def used_key_pairs(): if __name__ == "__main__": + print("in this file") parser = argparse.ArgumentParser() parser.add_argument('--region', action='store', dest='region', type=str, help='region name', required=False) diff --git a/src/scanner.py b/src/scanner.py index 7cdd184..f0de7c5 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -3,6 +3,7 @@ import time import boto3 +import subprocess import paramiko import requests from botocore.exceptions import ClientError, WaiterError @@ -26,7 +27,7 @@ def create_keypair(self, key_name): except ClientError as err: if err.response["Error"]["Code"] == "InvalidKeyPair.Duplicate": self.logger.warning(f"key pair: {key_name} already exists.") - val = input("use the existing keypair?[Y/N] \n") + val = input("use the existing keypair?[Y/N]\n") if val.lower() == "y": return key_name self.logger.error(f"create key pair: {err}") @@ -34,6 +35,7 @@ def create_keypair(self, key_name): self.logger.info('creating key pair: {red_detector_key}'.format(red_detector_key=self.key_pair_name)) with open(self.key_pair_name+'.pem', 'w') as f: # NEED TO OPEN A LOCAL FILE FOR "OLD" KEY PAIR TOO. f.write(new_keypair.key_material) + output = subprocess.getoutput("chmod 400 "+self.key_pair_name+'.pem') return key_name @staticmethod From 4c0c8ebc8b0c464bf78bc710ba2cc474f0eb7d38 Mon Sep 17 00:00:00 2001 From: IdanR-lightspin <90135915+IdanR-lighspin@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:23:40 +0200 Subject: [PATCH 10/11] Update main.py (- one line change) --- main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/main.py b/main.py index a658a79..2b93323 100644 --- a/main.py +++ b/main.py @@ -36,7 +36,6 @@ def used_key_pairs(): if __name__ == "__main__": - print("in this file") parser = argparse.ArgumentParser() parser.add_argument('--region', action='store', dest='region', type=str, help='region name', required=False) From 33181ecbc987500cad701d2fdbd33dfe64aacc0d Mon Sep 17 00:00:00 2001 From: IdanR-lightspin <90135915+IdanR-lighspin@users.noreply.github.com> Date: Mon, 27 Dec 2021 12:55:41 +0200 Subject: [PATCH 11/11] Update scanner.py --- src/scanner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scanner.py b/src/scanner.py index f0de7c5..178349d 100644 --- a/src/scanner.py +++ b/src/scanner.py @@ -33,7 +33,7 @@ def create_keypair(self, key_name): self.logger.error(f"create key pair: {err}") exit(99) self.logger.info('creating key pair: {red_detector_key}'.format(red_detector_key=self.key_pair_name)) - with open(self.key_pair_name+'.pem', 'w') as f: # NEED TO OPEN A LOCAL FILE FOR "OLD" KEY PAIR TOO. + with open(self.key_pair_name+'.pem', 'w') as f: f.write(new_keypair.key_material) output = subprocess.getoutput("chmod 400 "+self.key_pair_name+'.pem') return key_name