General Enhancements (#50)
* Hide email clients. * Always install CRON. * Add variable for the static IP to Hyperling.com. * Change IPs. * Beginnings of a script to do IPv6 SCP. * Add ability to specify which port SSH runs on. * Require the destination.
This commit is contained in:
88
files/scripts/ssh6.sh
Normal file
88
files/scripts/ssh6.sh
Normal file
@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
# 2024-01-28 Hyperling
|
||||
# Make it a little easier to handle IPv6 addresses with SSH and SCP.
|
||||
|
||||
## Variables ##
|
||||
|
||||
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
||||
echo "Running '$DIR/$PROG'."
|
||||
|
||||
# Defaults
|
||||
user="$LOGNAME"
|
||||
port=22
|
||||
output=""
|
||||
receive="N"
|
||||
|
||||
## Functions ##
|
||||
|
||||
function usage {
|
||||
echo -n "$PROG -d DESTINATION [-p PORT] [-u USER] [-i INPUT] "
|
||||
echo "[-o OUTPUT] [-r] [-h]"
|
||||
cat <<- EOF
|
||||
Script around having to sometimes doing "[IPv6]" syntax.
|
||||
-d : The IP address of the external system to connect to.
|
||||
-u : User to connect as. Defaults to current user.
|
||||
-p : Port which the external system is listening on.
|
||||
-i : File or folder which needs sent. This is done recursively.
|
||||
If this is not provided then only an SSH is done, not SCP.
|
||||
-o : Location on the receiving end where things should land.
|
||||
Defaults to :, meaning the foreign user's home directory.
|
||||
-r : Receive a file to the local machine, rather than send a file out.
|
||||
-h : Print this usage text.
|
||||
EOF
|
||||
exit $1
|
||||
}
|
||||
|
||||
## Parameters ##
|
||||
|
||||
while getopts ":d:u:i:o:rh" opt; do
|
||||
case "$opt" in
|
||||
d) destination="$OPTARG" ;;
|
||||
u) user="$OPTARG" ;;
|
||||
p) port="$OPTARG" ;;
|
||||
i) input="$OPTARG" ;;
|
||||
o) output="$OPTARG" ;;
|
||||
r) receive="Y" ;;
|
||||
h) usage 0 ;;
|
||||
*) echo "ERROR: $OPTARG not recognized." >&2
|
||||
usage 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
## Validations ##
|
||||
|
||||
if [[ -z $destination ]]; then
|
||||
echo "ERROR: Destination was not provided. $destination" >&2
|
||||
usage 2
|
||||
fi
|
||||
|
||||
if [[ -z $input && -n $output ]]; then
|
||||
echo "ERROR: Output '$output' was provided but not input. $input" >&2
|
||||
usage 3
|
||||
fi
|
||||
|
||||
## Main ##
|
||||
|
||||
date
|
||||
if [[ -n $input ]]; then
|
||||
if [[ $receive == "N" ]]; then
|
||||
echo -n "Sending '$input' from localhost to '$user@$destination' "
|
||||
echo " at '$output' using port '$port'."
|
||||
scp -r -p$port "$user@[$destination]":"$input" "$output"
|
||||
elif [[ $receive == "Y" ]]; then
|
||||
echo -n "Receiving '$input' from '$user@$destination' "
|
||||
echo " to '$output' on localhost using port '$port'."
|
||||
scp -r -p$port "$input" "$user@[$destination]":"$output"
|
||||
else
|
||||
echo "ERROR: Receive variable is screwed up. $receive" >&2
|
||||
fi
|
||||
else
|
||||
echo "No input file provided, connecting to destination."
|
||||
ssh -t $user@$destination
|
||||
fi
|
||||
date
|
||||
|
||||
## Finish ##
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user