ssh-portal (view raw)
1#!/bin/bash
2
3if ! [ -x "$(command -v gum)" ]; then
4 echo 'Error: gum is not installed.' >&2
5 echo 'See https://github.com/charmbracelet/gum' >&2
6 exit 1
7fi
8
9if ! [ -x "$(command -v jq)" ]; then
10 echo 'Error: jq is not installed.' >&2
11 echo 'See https://github.com/jqlang/jq' >&2
12 exit 1
13fi
14
15CONFIG_FILE="$HOME/.config/ssh-portal.json"
16
17if [ ! -f "$CONFIG_FILE" ]; then
18 echo "⚠ $CONFIG_FILE doesn't exist. Please create it."
19 exit 1
20fi
21
22INSTANCES=$(cat $CONFIG_FILE | jq .instances)
23ACTIONS=$(cat $CONFIG_FILE | jq .actions)
24
25CATEGORY=$(echo $INSTANCES| jq -r 'map(.category) | unique | .[]' | gum choose --header "📍 Catégorie")
26INSTANCE_NAME=$(echo $INSTANCES | jq -r ".[] | select(.category == \"$CATEGORY\") | .name" | gum choose --header "🔵 Instance")
27ACTION_NAME=$(echo $ACTIONS| jq -r .[].name | gum choose --header "$ Action")
28
29if [ -z "$INSTANCE_NAME" ] || [ -z "$ACTION_NAME" ]; then
30 exit 0
31fi
32
33INSTANCE=$(echo $INSTANCES | jq ".[] | select(.name == \"$INSTANCE_NAME\")")
34INSTANCE_USERNAME=$(echo $INSTANCE | jq -r '.username')
35ACTION_CMD=$(echo $ACTIONS | jq -r ".[] | select(.name == \"$ACTION_NAME\") | .cmd")
36SSH_HOST=$(echo $INSTANCE | jq -r '.host')
37SSH_PORT=$(echo $INSTANCE | jq -r '.port')
38
39
40if [ -z "$SSH_HOST" ] || [ "$SSH_HOST" = "null" ]; then
41 SSH_HOST=$(cat $CONFIG_FILE | jq -r .defaultSSH.host)
42fi
43if [ -z "$SSH_PORT" ] || [ "$SSH_PORT" = "null" ]; then
44 SSH_PORT=$(cat $CONFIG_FILE | jq -r .defaultSSH.port)
45fi
46
47echo "🚀 Connecting to $INSTANCE_NAME..."
48echo "$ $ACTION_CMD"
49
50ssh -p $SSH_PORT "$INSTANCE_USERNAME@$SSH_HOST" $ACTION_CMD