mirror of
https://github.com/CiscoDevNet/cml-community.git
synced 2025-10-25 17:14:03 +00:00
* New script project for SecureCRT Session Generation Simple script for automated session generation with secureCRT on windows. minimal module requirements
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
import yaml
|
|
import os
|
|
import winreg
|
|
|
|
def generate_session_ini(label, port, lab_title, filename, parent_folder):
|
|
"""
|
|
Generates a SecureCRT session.ini file with the provided information.
|
|
|
|
Args:
|
|
label (str): Label of the node.
|
|
port (int): Listen port of the device.
|
|
lab_title (str): Title of the lab.
|
|
filename (str): Name of the session.ini file to create.
|
|
parent_folder (str): Path to the parent folder where labs will be created.
|
|
"""
|
|
# Ensure parent folder exists
|
|
if not os.path.exists(parent_folder):
|
|
os.makedirs(parent_folder)
|
|
|
|
# Create lab-specific folder within the parent folder
|
|
lab_folder = parent_folder +"/" + lab_title
|
|
if not os.path.exists(lab_folder):
|
|
os.makedirs(lab_folder)
|
|
|
|
|
|
hexport = hex(port).split('x')[-1]
|
|
|
|
filepath = lab_folder + "/" + filename
|
|
with open(filepath, "w") as file:
|
|
file.write(f"S:\"Hostname\"=::1\n")
|
|
file.write(f"D:\"Port\"=0000{hexport}\n")
|
|
file.write(f"S:\"Protocol Name\"=Telnet\n") # Use telnet protocol
|
|
file.write(f"S:\"Color Scheme\"=Traditional\n")
|
|
file.write(f"D:\"ANSI Color\"=00000001\n")
|
|
file.write(f"S:\"Emulation\"=VT100\n")
|
|
|
|
key_path = r"SOFTWARE\VanDyke\SecureCRT" # Replace with your specific subkey if needed
|
|
try:
|
|
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path) as key:
|
|
# Replace "value_name" with the specific value you want to read within the key
|
|
value_name = "Config Path"
|
|
secureCrtPath, _ = winreg.QueryValueEx(key, value_name)
|
|
except WindowsError:
|
|
print(f"Error accessing registry key: {key_path}")
|
|
#define folder for labs and sessions to be placed
|
|
parent_folder = secureCrtPath + "\sessions\_CML"
|
|
#purge old labs/sessions
|
|
os.system(f'rmdir /s /q "{parent_folder}"')
|
|
|
|
# Specify the YAML file path
|
|
yaml_file_path = "labs.yaml" # Replace with your YAML file path
|
|
|
|
# Load the YAML data
|
|
try:
|
|
with open(yaml_file_path, "r") as file:
|
|
data = yaml.safe_load(file)
|
|
print(f"Successfully loaded YAML data from: {yaml_file_path}")
|
|
except FileNotFoundError as e:
|
|
print(f"Error: YAML file not found: {e}")
|
|
exit()
|
|
except yaml.YAMLError as e:
|
|
print(f"Error loading YAML data: {e}")
|
|
exit()
|
|
|
|
# Extract and handle potential missing key
|
|
nodes_data = data.get('nodes', {})
|
|
|
|
# Generate session.ini files and folders
|
|
node_info = []
|
|
print("Generating SecureCRT session.ini files for each node:")
|
|
for item_name, item_data in data.items():
|
|
# Check for 'nodes' key within each top-level item
|
|
if 'nodes' in item_data:
|
|
for node_id, node_data in item_data['nodes'].items():
|
|
label = node_data['label']
|
|
for device in node_data['devices']:
|
|
if device['enabled']:
|
|
port = device['listen_port']
|
|
lab_title = item_data['lab_title']
|
|
filename = f"{label}_{port}.ini"
|
|
valid_chars = " -_.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
#sanitize folder and file names
|
|
lab_title = "".join(c for c in lab_title if c in valid_chars)
|
|
filename = "".join(c for c in filename if c in valid_chars)
|
|
generate_session_ini(label, port, lab_title, filename, parent_folder)
|
|
print(f"- {parent_folder}/{lab_title}/{filename}")
|
|
print(f"File Generation Complete, Restart secureCRT if open already.")
|