This commit is contained in:
n0mad1k
2025-04-11 12:46:11 -04:00
parent 7962c574de
commit 5d92761405
3 changed files with 58 additions and 20 deletions
+43 -4
View File
@@ -436,10 +436,23 @@ def select_random_region(config):
if provider == "aws":
region_choices = config.get("aws_region_choices", [])
elif provider == "linode":
# Look for multiple possible key names in the Linode config
# Look for both variations of the key name
region_choices = config.get("region_choices", [])
# Debug the vars_data content
logging.debug(f"Linode config keys: {config.keys()}")
if not region_choices:
region_choices = config.get("linode_region_choices", [])
# Load directly from vars.yaml as fallback
try:
vars_file = "Linode/vars.yaml"
if os.path.exists(vars_file):
with open(vars_file, 'r') as f:
vars_data = yaml.safe_load(f)
region_choices = vars_data.get('region_choices', [])
logging.debug(f"Loaded region_choices directly from {vars_file}: {region_choices}")
except Exception as e:
logging.warning(f"Failed to load regions from vars file: {e}")
elif provider == "flokinet":
region_choices = config.get("flokinet_region_choices", [])
@@ -505,6 +518,15 @@ def run_ansible_playbook(playbook, inventory, config, debug=False):
# Convert config dict to JSON for extra-vars
# Filter out None values and complex objects
extra_vars = {k: v for k, v in config.items() if v is not None and not isinstance(v, (dict, list, tuple))}
# Explicitly set hard-coded user values rather than using templated defaults
if 'ssh_user' in extra_vars:
extra_vars.pop('ssh_user')
if config['provider'] == 'linode':
extra_vars['ssh_user'] = 'root'
else:
extra_vars['ssh_user'] = 'kali'
extra_vars_json = json.dumps(extra_vars)
# Build command
@@ -561,6 +583,12 @@ def deploy_infrastructure(config):
if config.get('linode_token'):
os.environ['LINODE_TOKEN'] = config['linode_token']
# IMPORTANT: Ensure ssh_user is explicitly set to avoid template recursion
if provider == "linode":
config['ssh_user'] = "root"
elif provider == "aws":
config['ssh_user'] = "kali"
# Select random region if not specified
if not config.get('region'):
config['region'] = select_random_region(config)
@@ -1097,6 +1125,10 @@ C2itAll - Red Team Infrastructure Setup
# Provider settings
config['provider'] = args.provider
# Copy all values from vars_data to config first
for key, value in vars_data.items():
config[key] = value
# AWS settings
if args.provider == "aws":
config['aws_access_key'] = args.aws_key or vars_data.get('aws_access_key')
@@ -1110,6 +1142,7 @@ C2itAll - Red Team Infrastructure Setup
elif args.provider == "linode":
config['linode_token'] = args.linode_token or vars_data.get('linode_token')
config['linode_region'] = args.linode_region or args.region or vars_data.get('linode_region')
# Ensure region_choices are correctly set
config['region_choices'] = vars_data.get('region_choices', [])
config['plan'] = args.size or vars_data.get('plan', 'g6-standard-2')
config['image'] = vars_data.get('image', 'linode/kali')
@@ -1121,8 +1154,14 @@ C2itAll - Red Team Infrastructure Setup
config['flokinet_region_choices'] = vars_data.get('flokinet_region_choices', [])
config['ssh_port'] = vars_data.get('ssh_port', 22)
# SSH settings
config['ssh_user'] = args.ssh_user or vars_data.get('ssh_user') or (DEFAULT_SSH_USER.get(args.provider) if args.provider else None)
# SSH settings - explicitly set SSH user to avoid template recursion
if args.provider == "linode":
config['ssh_user'] = "root"
elif args.provider == "aws":
config['ssh_user'] = "kali"
else:
config['ssh_user'] = args.ssh_user or vars_data.get('ssh_user') or (DEFAULT_SSH_USER.get(args.provider) if args.provider else None)
if args.ssh_key:
config['ssh_key'] = os.path.expanduser(args.ssh_key)
else: