92 lines
2.3 KiB
Bash
Executable file
92 lines
2.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Enhanced remote-admin connection script
|
|
# Checks for free remote-admin PC via SMB share and launches RDP connection
|
|
|
|
AMPEL_MOUNT="/tmp/remote-ampel"
|
|
SHARE="//cluster-ho/Ampel"
|
|
SMB_CRED="$HOME/.smbcredentials"
|
|
RDP_CRED="$HOME/.remote-admin"
|
|
FSTAB_ENTRY="$SHARE $AMPEL_MOUNT cifs credentials=$SMB_CRED,user,noauto,workgroup=ZFD,dir_mode=0777,file_mode=0777,_netdev 0 0"
|
|
|
|
# Logging function
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
ask_permission() {
|
|
read -p "$1 (y/n): " answer
|
|
[[ "$answer" =~ ^[Yy]$ ]]
|
|
}
|
|
|
|
# Trap for cleanup
|
|
cleanup() {
|
|
umount "$AMPEL_MOUNT" 2>/dev/null
|
|
log "Unmounted $AMPEL_MOUNT."
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# Check for credentials
|
|
if [ ! -f "$RDP_CRED" ]; then
|
|
log "$RDP_CRED not found! Please create it!"
|
|
exit 1
|
|
fi
|
|
if [ ! -f "$SMB_CRED" ]; then
|
|
log "$SMB_CRED not found! Please create it!"
|
|
exit 2
|
|
fi
|
|
|
|
# Source RDP credentials
|
|
source "$RDP_CRED"
|
|
|
|
# Detect FreeRDP
|
|
FREERDP_BIN=$(command -v xfreerdp || command -v wfreerdp)
|
|
if [ -z "$FREERDP_BIN" ]; then
|
|
log "No FreeRDP client found (xfreerdp or wfreerdp). Please install one."
|
|
exit 3
|
|
fi
|
|
|
|
# Check fstab entry
|
|
if ! grep -qs "$AMPEL_MOUNT" /etc/fstab; then
|
|
log "Fstab entry for $AMPEL_MOUNT not found."
|
|
if ask_permission "Shall I add the entry automatically?"; then
|
|
sudo bash -c "echo '$FSTAB_ENTRY' >> /etc/fstab"
|
|
log "Fstab entry added."
|
|
fi
|
|
fi
|
|
|
|
# Check mount.cifs permissions
|
|
if [ ! -u /usr/sbin/mount.cifs ]; then
|
|
log "mount.cifs is missing setuid bit."
|
|
if ask_permission "Shall I set it automatically?"; then
|
|
sudo chmod u+s /usr/sbin/mount.cifs
|
|
log "Setuid bit set on /usr/sbin/mount.cifs."
|
|
fi
|
|
fi
|
|
|
|
# Mount the share
|
|
mkdir -p "$AMPEL_MOUNT"
|
|
if grep -qs "$AMPEL_MOUNT" /proc/mounts; then
|
|
log "$AMPEL_MOUNT already mounted."
|
|
else
|
|
log "Mounting $AMPEL_MOUNT..."
|
|
if ! mount "$AMPEL_MOUNT"; then
|
|
log "Mount failed. Check share configuration."
|
|
exit 4
|
|
fi
|
|
log "Mount successful."
|
|
fi
|
|
|
|
# Search for free remote admin PC
|
|
sleep 1
|
|
for i in "$AMPEL_MOUNT"/*; do
|
|
[[ "$i" == *FREE* ]] || continue
|
|
RDP=$(basename "$i" | cut -f1,2 -d'-')
|
|
log "$RDP is free. Starting RDP session..."
|
|
"$FREERDP_BIN" /u:"$USERNAME" /p:"$PASSWORD" /v:"$RDP.zfd.forumzfd.de" /dynamic-resolution
|
|
log "Connection closed. Bye."
|
|
exit 0
|
|
done
|
|
|
|
log "No Remote-Admin is free. Try again later."
|
|
exit 0
|