cnssh: Refactored to support authentication on remote devices
This commit is contained in:
		
							parent
							
								
									1a2a0e83f9
								
							
						
					
					
						commit
						c2ddb0184a
					
				@ -1,16 +1,103 @@
 | 
			
		||||
cnssh() {
 | 
			
		||||
	# Usage: cnssh <ip address> [command]
 | 
			
		||||
	local uname="Crestron"
 | 
			
		||||
	local pass=""
 | 
			
		||||
	local addr="$1"
 | 
			
		||||
	shift
 | 
			
		||||
	local cmd="$@" 
 | 
			
		||||
cnssh() {	# Helper for sshing into Crestron devices
 | 
			
		||||
		# 
 | 
			
		||||
		# USAGE
 | 
			
		||||
		#
 | 
			
		||||
		#	cnssh <ip address> [command]
 | 
			
		||||
		#
 | 
			
		||||
		#
 | 
			
		||||
		# 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 GlobalKnownHostsFile=/dev/null\
 | 
			
		||||
		-o UserKnownHostsFile=/dev/null\
 | 
			
		||||
		-o LogLevel=ERROR\
 | 
			
		||||
		-o User="$uname"\
 | 
			
		||||
		"$addr" "$cmd"
 | 
			
		||||
		-o User="${cnssh_conf[uname]}"\
 | 
			
		||||
		"${cnssh_conf[addr]}" "${cnssh_conf[cmd]}"
 | 
			
		||||
 | 
			
		||||
	# Main
 | 
			
		||||
	####
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user