From 3b3ca8f5a9be4e871845e3048166ec6e06ad3b86 Mon Sep 17 00:00:00 2001 From: Saige Bowerman Date: Tue, 2 Jul 2024 18:51:10 -0500 Subject: [PATCH] Commit 1 - SaigeDev || Added Local Configurations. --- bssh.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/bssh.sh b/bssh.sh index 50c821e..5878fff 100644 --- a/bssh.sh +++ b/bssh.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash -SERVER_URL="http://se-chat.zelz.net" +SERVER_URL="http://ssh.andresdev.online" +CONFIG_DIR="$HOME/.ssh_confs" show_help() { echo "Usage: bssh [options] " @@ -11,18 +12,25 @@ show_help() { 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 "" 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" } -list_configs() { +list_cloud_configs() { echo "Cloud Configurations Available:" curl -s "${SERVER_URL}/configurations" } +list_local_configs() { + echo "Local Configurations Available:" + ls "$CONFIG_DIR"/*.yml 2>/dev/null | xargs -n 1 basename --suffix=".yml" +} + login_user() { local username="$1" local password="$2" @@ -35,12 +43,56 @@ save_configuration() { local name="$1" local filename="$2" - content=$(cat "$HOME/ssh_confs/$filename") + content=$(cat "$CONFIG_DIR/$filename") response=$(curl -s -X POST -d "name=${name}&content=${content}" "${SERVER_URL}/save-configuration") echo "$response" } -# Check for options +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') + + 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" + 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" + 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 + if [ $# -eq 0 ]; then show_help exit 0 @@ -52,7 +104,8 @@ case $1 in exit 0 ;; -l|--list) - list_configs + list_cloud_configs + list_local_configs exit 0 ;; -u|--user) @@ -75,6 +128,14 @@ case $1 in save_configuration "$2" "$3" exit 0 ;; + -o|--offline) + if [ $# -ne 2 ]; then + echo "Error: Configuration name required." + exit 1 + fi + connect_ssh "$2" + exit 0 + ;; *) CONF_NAME=$1 ;;