:Release Notes: - :Detailed Notes: - :Testing Performed: - :QA Notes: - :Issues Addressed: -
99 lines
2.3 KiB
Bash
Executable File
99 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
port=22 # default SSH port
|
|
cache=".maccess-lastused"
|
|
journal=".maccess-journal"
|
|
user_host=""
|
|
user="default"
|
|
jump=""
|
|
lock_file="lock.mutex"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [-p PORT -J jump1,jump2 -u YourName] user@host"
|
|
exit 1
|
|
}
|
|
|
|
# Parse command line options
|
|
while getopts ":p:J:u:h" opt; do
|
|
case $opt in
|
|
p)
|
|
if ! [[ "$OPTARG" =~ ^[0-9]+$ ]] || [ "$OPTARG" -gt 65535 ]; then
|
|
echo "Invalid port number: $OPTARG"
|
|
exit 1
|
|
fi
|
|
port="$OPTARG"
|
|
;;
|
|
J)
|
|
jump="-J $OPTARG"
|
|
echo "ProxyJump: $jump"
|
|
;;
|
|
u)
|
|
user="$OPTARG"
|
|
;;
|
|
h)
|
|
usage
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG"
|
|
usage
|
|
;;
|
|
:)
|
|
echo "Option -$OPTARG requires an argument"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND -1))
|
|
|
|
if [ $# -ne 1 ]; then
|
|
echo "Using $cache"
|
|
|
|
if [ -f "$cache" ]; then
|
|
{
|
|
read -r jump_cached
|
|
read -r port_cached
|
|
read -r user_host_cached
|
|
} < "$cache"
|
|
jump="$jump_cached"
|
|
port="$port_cached"
|
|
user_host="$user_host_cached"
|
|
else
|
|
echo "Error: Cache file $cache not found." >&2
|
|
usage
|
|
fi
|
|
else
|
|
user_host="$1"
|
|
echo "$jump" > "$cache"
|
|
echo "$port" >> "$cache"
|
|
echo "$user_host" >> "$cache"
|
|
fi
|
|
|
|
|
|
# Check if lock file exists on remote
|
|
if ssh $jump -p "$port" "$user_host" "test -e '$lock_file'"; then
|
|
echo "Error: Lock file $lock_file exists on $user_host" >&2
|
|
whoisusing=$(ssh $jump -p $port $user_host "cat $lock_file")
|
|
echo "At the moment in use by $whoisusing" >&2
|
|
echo "Session might be active. Exiting." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Create lock file
|
|
ssh $jump -p "$port" "$user_host" "echo '$user' > '$lock_file'"
|
|
echo "Locked for user $user"
|
|
echo "[Start] [$(date +%Y-%m-%d-%H-%M-%S)] $user" >> $journal
|
|
cleanup() {
|
|
echo "Removing lock file..."
|
|
ssh $jump -p "$port" "$user_host" "rm -f '$lock_file'"
|
|
echo "[End] [$(date +%Y-%m-%d-%H-%M-%S)] $user" >> $journal
|
|
}
|
|
|
|
# Register cleanup trap
|
|
trap cleanup EXIT INT TERM
|
|
|
|
# Start interactive session
|
|
echo "Starting SSH session (port $port). Lock file created."
|
|
ssh $jump -p "$port" "$user_host"
|
|
|