cnssh: Refactored to support authentication on remote devices
This commit is contained in:
parent
1a2a0e83f9
commit
c2ddb0184a
|
@ -1,16 +1,103 @@
|
||||||
cnssh() {
|
cnssh() { # Helper for sshing into Crestron devices
|
||||||
# Usage: cnssh <ip address> [command]
|
#
|
||||||
local uname="Crestron"
|
# USAGE
|
||||||
local pass=""
|
#
|
||||||
local addr="$1"
|
# cnssh <ip address> [command]
|
||||||
shift
|
#
|
||||||
local cmd="$@"
|
#
|
||||||
|
# OPTIONS
|
||||||
|
#
|
||||||
|
# -u <username> Specify the username to use with ssh
|
||||||
|
# Default: "Crestron"
|
||||||
|
#
|
||||||
|
# CONFIG ARRAY: cnssh_conf
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# | Option | Valid Args | Default | Description |
|
||||||
|
# | ------------- | ------------- | ------------- | --------------------------------------------- |
|
||||||
|
# | uname | <string> | "Crestron" | The username for use with ssh |
|
||||||
|
# | pass | <string> | "" | The password for use with ssh (via sshpass) |
|
||||||
|
# | addr | <string> | <ip address> | The address of the remote device |
|
||||||
|
# | cmd | <string> | [command] | The command to execute on the remote device |
|
||||||
|
|
||||||
sshpass -p "$pass" ssh \
|
|
||||||
|
####
|
||||||
|
# Config init
|
||||||
|
|
||||||
|
# Initialize config array if it doesn't already exist
|
||||||
|
if [[ ! -v cnssh_conf[@] ]]; then
|
||||||
|
declare -A cnssh_conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize and populate default config array
|
||||||
|
declare -A dconf
|
||||||
|
dconf=(
|
||||||
|
[uname]="Crestron"
|
||||||
|
[pass]=""
|
||||||
|
)
|
||||||
|
|
||||||
|
# Config init
|
||||||
|
####
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Option Parsing
|
||||||
|
|
||||||
|
while getopts ":u:" opt; do
|
||||||
|
case $opt in
|
||||||
|
u)
|
||||||
|
cnssh_conf[uname]="$OPTARG"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Unknown option -$OPTARG"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "Option requires argument: -$OPTARG"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove parsed options from $@
|
||||||
|
shift $((OPTIND -1))
|
||||||
|
|
||||||
|
# Set the address based on the first
|
||||||
|
# arg if not already set in config array
|
||||||
|
if [[ ! -v cnssh_conf[addr] ]]; then
|
||||||
|
cnssh_conf[addr]="$1"
|
||||||
|
shift 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the command as the rest of argv
|
||||||
|
# if not already set in config array
|
||||||
|
if [[ ! -v cnssh_conf[cmd] ]]; then
|
||||||
|
cnssh_conf[cmd]="$*"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply defaults to running config
|
||||||
|
for opt in "${!dconf[@]}"; do
|
||||||
|
# Don't apply the default if it's already set
|
||||||
|
if [[ ! -v cnssh_conf[$opt] ]]; then
|
||||||
|
cnssh_conf[$opt]=${dconf[$opt]}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Option Parsing
|
||||||
|
####
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Main
|
||||||
|
|
||||||
|
sshpass -p "${cnssh_conf[pass]}" ssh \
|
||||||
-o StrictHostKeyChecking=no\
|
-o StrictHostKeyChecking=no\
|
||||||
-o GlobalKnownHostsFile=/dev/null\
|
-o GlobalKnownHostsFile=/dev/null\
|
||||||
-o UserKnownHostsFile=/dev/null\
|
-o UserKnownHostsFile=/dev/null\
|
||||||
-o LogLevel=ERROR\
|
-o LogLevel=ERROR\
|
||||||
-o User="$uname"\
|
-o User="${cnssh_conf[uname]}"\
|
||||||
"$addr" "$cmd"
|
"${cnssh_conf[addr]}" "${cnssh_conf[cmd]}"
|
||||||
|
|
||||||
|
# Main
|
||||||
|
####
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue