Repository navigation
Expand file tree
/
Copy pathssh-conf
More file actions
executable file
·71 lines (64 loc) · 2.28 KB
/
Copy pathssh-conf
File metadata and controls
executable file
·71 lines (64 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
set -e
SCRIPT_DIR=$(dirname "$0")
# shellcheck source=./_ssh-unique-key.inc.sh
source "${SCRIPT_DIR}/_ssh-unique-key.inc.sh"
usage() {
echo "Usage: ssh-conf <host> [Option] [Value] | --remove <Option>"
echo " -V, --verbose Enable verbose output"
echo " -h, --help Show this help message"
echo " -v, --version Show version information"
exit 0
}
POSITIONAL_ARGS=()
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help) usage ;;
-v|--version) show_version ;;
-V|--verbose) VERBOSE=1; shift ;;
--remove) REMOVE_MODE=1; shift ;;
-*) err "Unknown option $1"; usage ;;
*) POSITIONAL_ARGS+=("$1"); shift ;;
esac
done
set -- "${POSITIONAL_ARGS[@]}"
if [ "$#" -lt 1 ]; then usage; fi
HOST_NAME="$1"
OPTION="$2"
VALUE="$3"
CANONICAL_PATH=$(get_uuid_path_from_host "$HOST_NAME")
if [ -z "$CANONICAL_PATH" ]; then
err "Host '$HOST_NAME' not registered."
fi
CONFIG_FILE="$CANONICAL_PATH/config"
touch "$CONFIG_FILE" && chmod 600 "$CONFIG_FILE"
if [ "$REMOVE_MODE" == "1" ]; then
# remove mode: ssh-conf host --remove Option
if [ -z "$OPTION" ]; then err "Specify option to remove."; fi
# Sanitize OPTION for use in sed pattern (escape regex metacharacters)
SAFE_OPTION=$(printf '%s\n' "$OPTION" | sed 's/[[\.*^$()+?{|/]/\\&/g')
sed -i.bak "/^${SAFE_OPTION}\s/I d" "$CONFIG_FILE" && rm -f "$CONFIG_FILE.bak"
echo "Removed '$OPTION'."
log_event "conf-remove" "$HOST_NAME" "Removed $OPTION"
else
# add/view mode
if [ -z "$OPTION" ]; then
# View config
echo "Config for $HOST_NAME ($CONFIG_FILE):"
cat "$CONFIG_FILE"
else
# Add/Update
if [ -z "$VALUE" ]; then err "Provide value for $OPTION."; fi
SAFE_OPTION=$(printf '%s\n' "$OPTION" | sed 's/[[\.*^$()+?{|/]/\\&/g')
SAFE_VALUE=$(printf '%s\n' "$VALUE" | sed 's/[&/\]/\\&/g')
if grep -q -i "^${SAFE_OPTION}\s" "$CONFIG_FILE"; then
sed -i.bak "s/^${SAFE_OPTION}\s.*/${OPTION} ${SAFE_VALUE}/I" "$CONFIG_FILE"
echo "Updated '$OPTION'."
else
echo "${OPTION} ${VALUE}" >> "$CONFIG_FILE"
echo "Added '$OPTION'."
fi
rm -f "$CONFIG_FILE.bak"
log_event "conf-update" "$HOST_NAME" "$OPTION=$VALUE"
fi
fi