From 754528fb3afaaa0fc08a9e9b5a0e042963bed813 Mon Sep 17 00:00:00 2001 From: Saige Bowerman Date: Tue, 2 Jul 2024 22:32:11 -0500 Subject: [PATCH] Commit 2 - SaigeDev || Fixed Local Confs. Fixed Local Confs: Better SSH now has the option to use Local Configurations Stored at "$HOME/.ssh_confs". Usage: bssh -o FILENAME bssh --offline FILENAME Added Local Configuration Maker: Better SSH can now Make Local Configurations through a simple Command. Usage: bssh -m bssh --make --- bssh.sh | 124 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 51 deletions(-) diff --git a/bssh.sh b/bssh.sh index 5878fff..404de81 100644 --- a/bssh.sh +++ b/bssh.sh @@ -1,40 +1,52 @@ #!/usr/bin/env bash SERVER_URL="http://ssh.andresdev.online" -CONFIG_DIR="$HOME/.ssh_confs" +CONF_DIR="$HOME/.ssh_confs" + +create_conf_directory() { + if [ ! -d "$CONF_DIR" ]; then + mkdir -p "$CONF_DIR" + echo "Configuration directory created at $CONF_DIR." + fi +} show_help() { echo "Usage: bssh [options] " echo "" echo "Options:" echo " -h, --help Show this help message and exit" - echo " -l, --list List all available configurations" + echo " -l, --list List all available configurations (local and cloud)" echo " -u, --user Login with username" echo " -p, --password Password for login" echo " -s, --save Save configuration to Cloud" - echo " -o, --offline Use local configuration file" + echo " -o, --offline Use local configuration" + echo " -m, --make Create a new local configuration" echo "" echo "Examples:" echo " bssh -u kimeru -p password Login with user kimeru" echo " bssh -l List all available configurations" echo " bssh -s web2 web2.yml Save configuration web2.yml to Cloud" - echo " bssh -o web2 Connect using local configuration web2.yml" + echo " bssh -o CONF_NAME Use local configuration" + echo " bssh --make Create a new local configuration" } -list_cloud_configs() { +list_configs() { echo "Cloud Configurations Available:" curl -s "${SERVER_URL}/configurations" -} - -list_local_configs() { + echo "" echo "Local Configurations Available:" - ls "$CONFIG_DIR"/*.yml 2>/dev/null | xargs -n 1 basename --suffix=".yml" + if [ "$(ls -A "$CONF_DIR"/*.yml 2>/dev/null)" ]; then + for conf in "$CONF_DIR"/*.yml; do + basename "$conf" .yml + done + else + echo "None" + fi } login_user() { local username="$1" local password="$2" - response=$(curl -s -X POST -d "username=${username}&password=${password}" "${SERVER_URL}/login") echo "$response" } @@ -42,56 +54,63 @@ login_user() { save_configuration() { local name="$1" local filename="$2" - - content=$(cat "$CONFIG_DIR/$filename") + content=$(cat "$CONF_DIR/$filename") response=$(curl -s -X POST -d "name=${name}&content=${content}" "${SERVER_URL}/save-configuration") echo "$response" } -connect_ssh() { - local conf_name="$1" - local conf_file="$CONFIG_DIR/${conf_name}.yml" - - if [ ! -f "$conf_file" ]; then - echo "Configuration file $conf_name.yml not found locally. Attempting to retrieve from cloud..." - - cloud_conf=$(curl -s "${SERVER_URL}/configuration/${conf_name}") - if [ -z "$cloud_conf" ]; then - echo "Configuration $conf_name not found in cloud." - exit 1 - fi - - echo "$cloud_conf" > "$conf_file" - fi - - host=$(grep 'host:' "$conf_file" | sed 's/^[ \t]*host:[ \t]*//' | awk '{$1=$1};1') - port=$(grep 'port:' "$conf_file" | sed 's/^[ \t]*port:[ \t]*//' | awk '{$1=$1};1') - username=$(grep 'username:' "$conf_file" | sed 's/^[ \t]*username:[ \t]*//' | awk '{$1=$1};1') - auth=$(grep 'auth:' "$conf_file" | sed 's/^[ \t]*auth:[ \t]*//' | awk '{$1=$1};1') +create_local_configuration() { + read -p "Enter host: " host + read -p "Enter port: " port + read -p "Enter username: " username + read -p "Enter authentication method (password/key): " auth if [ "$auth" == "password" ]; then - password=$(grep 'password:' "$conf_file" | sed 's/^[ \t]*password:[ \t]*//' | awk '{$1=$1};1') - echo "Connecting to $host as $username using password authentication..." - sshpass -p "$password" ssh "$username@$host" -p "$port" + read -sp "Enter password: " password + echo "" + echo -e "host: $host\nport: $port\nusername: $username\nauth: $auth\npassword: $password" > "$CONF_DIR/$username.yml" elif [ "$auth" == "key" ]; then - key=$(sed -n '/key:/,/^ *$/p' "$conf_file" | sed '1d;$d' | awk '{$1=$1};1') - echo "Connecting to $host as $username using key authentication..." - - key_file=$(mktemp) - echo "$key" > "$key_file" - chmod 600 "$key_file" - ssh -i "$key_file" "$username@$host" -p "$port" - rm "$key_file" + read -p "Enter path to private key: " key_path + echo -e "host: $host\nport: $port\nusername: $username\nauth: $auth\nkey: |" > "$CONF_DIR/$username.yml" + sed 's/^/ /' "$key_path" >> "$CONF_DIR/$username.yml" + else + echo "Unknown authentication method: $auth" + exit 1 + fi + + echo "Configuration saved to $CONF_DIR/$username.yml" +} + +use_local_conf() { + local conf_name="$1" + local conf_file="$CONF_DIR/$conf_name.yml" + + if [ ! -f "$conf_file" ]; then + echo "Configuration $conf_name not found." + exit 1 + fi + + host=$(grep '^host: ' "$conf_file" | awk '{print $2}') + port=$(grep '^port: ' "$conf_file" | awk '{print $2}') + username=$(grep '^username: ' "$conf_file" | awk '{print $2}') + auth=$(grep '^auth: ' "$conf_file" | awk '{print $2}') + + if [ "$auth" == "password" ]; then + password=$(grep '^password: ' "$conf_file" | awk '{print $2}') + sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$host" -p "$port" + elif [ "$auth" == "key" ]; then + key=$(awk '/^key: \|/{flag=1; next} /-----END/{flag=0} flag' "$conf_file") + echo "$key" > "$CONF_DIR/temp_key" + chmod 600 "$CONF_DIR/temp_key" + ssh -i "$CONF_DIR/temp_key" -o StrictHostKeyChecking=no "$username@$host" -p "$port" + rm "$CONF_DIR/temp_key" else echo "Unknown authentication method: $auth" exit 1 fi } -if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then - mkdir -p "$CONFIG_DIR" - echo "Created directory $CONFIG_DIR for storing local configurations." -fi +create_conf_directory if [ $# -eq 0 ]; then show_help @@ -104,8 +123,7 @@ case $1 in exit 0 ;; -l|--list) - list_cloud_configs - list_local_configs + list_configs exit 0 ;; -u|--user) @@ -133,7 +151,11 @@ case $1 in echo "Error: Configuration name required." exit 1 fi - connect_ssh "$2" + use_local_conf "$2" + exit 0 + ;; + -m|--make) + create_local_configuration exit 0 ;; *) @@ -143,4 +165,4 @@ esac echo "Unknown option: $1" show_help -exit 1 \ No newline at end of file +exit 1