bssh/bssh.sh

169 lines
4.8 KiB
Bash

#!/usr/bin/env bash
SERVER_URL="http://ssh.andresdev.online"
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] <CONF_NAME>"
echo ""
echo "Options:"
echo " -h, --help Show this help message and exit"
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"
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 CONF_NAME Use local configuration"
echo " bssh --make Create a new local configuration"
}
list_configs() {
echo "Cloud Configurations Available:"
curl -s "${SERVER_URL}/configurations"
echo ""
echo "Local Configurations Available:"
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"
}
save_configuration() {
local name="$1"
local filename="$2"
content=$(cat "$CONF_DIR/$filename")
response=$(curl -s -X POST -d "name=${name}&content=${content}" "${SERVER_URL}/save-configuration")
echo "$response"
}
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
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
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
}
create_conf_directory
if [ $# -eq 0 ]; then
show_help
exit 0
fi
case $1 in
-h|--help)
show_help
exit 0
;;
-l|--list)
list_configs
exit 0
;;
-u|--user)
if [ $# -ne 3 ]; then
echo "Error: Username and password required."
exit 1
fi
login_user "$2" "$3"
exit 0
;;
-p|--password)
echo "Error: Password option must be used with -u/--user."
exit 1
;;
-s|--save)
if [ $# -ne 3 ]; then
echo "Error: Configuration name and filename required."
exit 1
fi
save_configuration "$2" "$3"
exit 0
;;
-o|--offline)
if [ $# -ne 2 ]; then
echo "Error: Configuration name required."
exit 1
fi
use_local_conf "$2"
exit 0
;;
-m|--make)
create_local_configuration
exit 0
;;
*)
CONF_NAME=$1
;;
esac
echo "Unknown option: $1"
show_help
exit 1