Commit 1 - SaigeDev || Added Local Configurations.

This commit is contained in:
Saige Bowerman 2024-07-02 18:51:10 -05:00
parent 4314fb94eb
commit 3b3ca8f5a9
1 changed files with 66 additions and 5 deletions

71
bssh.sh
View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
SERVER_URL="http://se-chat.zelz.net" SERVER_URL="http://ssh.andresdev.online"
CONFIG_DIR="$HOME/.ssh_confs"
show_help() { show_help() {
echo "Usage: bssh [options] <CONF_NAME>" echo "Usage: bssh [options] <CONF_NAME>"
@ -11,18 +12,25 @@ show_help() {
echo " -u, --user Login with username" echo " -u, --user Login with username"
echo " -p, --password Password for login" echo " -p, --password Password for login"
echo " -s, --save Save configuration to Cloud" echo " -s, --save Save configuration to Cloud"
echo " -o, --offline Use local configuration file"
echo "" echo ""
echo "Examples:" echo "Examples:"
echo " bssh -u kimeru -p password Login with user kimeru" echo " bssh -u kimeru -p password Login with user kimeru"
echo " bssh -l List all available configurations" echo " bssh -l List all available configurations"
echo " bssh -s web2 web2.yml Save configuration web2.yml to Cloud" 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:" echo "Cloud Configurations Available:"
curl -s "${SERVER_URL}/configurations" 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() { login_user() {
local username="$1" local username="$1"
local password="$2" local password="$2"
@ -35,12 +43,56 @@ save_configuration() {
local name="$1" local name="$1"
local filename="$2" 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") response=$(curl -s -X POST -d "name=${name}&content=${content}" "${SERVER_URL}/save-configuration")
echo "$response" 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 if [ $# -eq 0 ]; then
show_help show_help
exit 0 exit 0
@ -52,7 +104,8 @@ case $1 in
exit 0 exit 0
;; ;;
-l|--list) -l|--list)
list_configs list_cloud_configs
list_local_configs
exit 0 exit 0
;; ;;
-u|--user) -u|--user)
@ -75,6 +128,14 @@ case $1 in
save_configuration "$2" "$3" save_configuration "$2" "$3"
exit 0 exit 0
;; ;;
-o|--offline)
if [ $# -ne 2 ]; then
echo "Error: Configuration name required."
exit 1
fi
connect_ssh "$2"
exit 0
;;
*) *)
CONF_NAME=$1 CONF_NAME=$1
;; ;;