diff --git a/README.md b/README.md index fe0b028..35f3c8e 100644 --- a/README.md +++ b/README.md @@ -1,90 +1,29 @@ -# README +## README This repository contains some more or less usefull linux scripts. ;) **`remote-admin.sh`** -## Remote Admin Enhanced +This script checks for the next free remote-admin pc and established a RDP session using xfreerdp to it. +To use this script you need to create two files in your home directory -This script automatically connects you to a free remote admin PC via RDP. It uses an SMB share to check availability and FreeRDP to establish the connection. The script verifies necessary system settings and assists with setup. +.smbcredentials -## Requirements + username=YOUR AD USERNAME + password=YOUR AD PASSWORD -* Bash shell -* FreeRDP (either `xfreerdp` or `wfreerdp`) -* Access to the SMB share `//cluster-ho/Ampel` -* Two configuration files: +.remote-admin - * `~/.smbcredentials` (for SMB access) - * `~/.remote-admin` (for RDP login) + USERNAME=administrator@zfd.forumzfd.de + PASSWORD=AD ADMIN PASSWORD FROM BITWARDEN -## Configuration Files +Make sure to proper chmod them (e.g. `chmod 600`) -### \~/.smbcredentials +Add the following line to your /etc/fstab and edit YOUR_USERNAME -``` -username=YOUR_AD_USERNAME -password=YOUR_AD_PASSWORD -``` + //cluster-ho/Ampel /tmp/remote-ampel cifs credentials=/home/YOUR_USERNAME/.smbcredentials,user,noauto,workgroup=ZFD,dir_mode=0777,file_mode=0777,_netdev 0 0 -**Important:** Set secure file permissions: +setuid might be necessary on /usr/sbin/mount.cifs. Set it as root with -```bash -chmod 600 ~/.smbcredentials -``` + chmod u+s /usr/sbin/mount.cifs -### \~/.remote-admin - -``` -USERNAME=administrator@zfd.forumzfd.de -PASSWORD=YOUR_ADMIN_PASSWORD -``` - -**Secure this file too:** - -```bash -chmod 600 ~/.remote-admin -``` - -## fstab Configuration - -Add the following line to `/etc/fstab` (if not already present): - -``` -//cluster-ho/Ampel /tmp/remote-ampel cifs credentials=/home/YOUR_USERNAME/.smbcredentials,user,noauto,workgroup=ZFD,dir_mode=0777,file_mode=0777,_netdev 0 0 -``` - -The script can also add this line automatically (after confirmation). - -## Preparing mount.cifs - -To allow regular users to mount the share, `mount.cifs` must have the `setuid` bit: - -```bash -sudo chmod u+s /usr/sbin/mount.cifs -``` - -This step is also detected by the script and can be applied automatically after confirmation. - -## Usage - -```bash -./remote-admin.sh -``` - -The script: - -* checks whether all requirements are met, -* mounts the SMB share (if not already mounted), -* searches for a free remote admin PC, -* starts the RDP connection, -* and automatically unmounts the share when finished. - -## Notes - -* If no remote admin PC is available, the script will let you know. -* You can safely run the script multiple times. -* Users are expected to install FreeRDP themselves, if it's not already present. - ---- - -Enjoy your remote adventures and happy adminning! ✨ +Make sure you have xfreerdp installed on your computer. \ No newline at end of file diff --git a/remote-admin.sh b/remote-admin.sh old mode 100755 new mode 100644 index 4efab4e..8f15e15 --- a/remote-admin.sh +++ b/remote-admin.sh @@ -1,92 +1,69 @@ #!/bin/bash -# Enhanced remote-admin connection script -# Checks for free remote-admin PC via SMB share and launches RDP connection +# This script checks for the next free remote-admin pc and established a RDP session using xfreerdp to it. +# To use this script you need to create two files in your home directory +# +# .smbcredentials +# username=YOUR AD USERNAME +# password=YOUR AD PASSWORD +# +# .remote-admin +# USERNAME=administrator@zfd.forumzfd.de +# PASSWORD=AD ADMIN PASSWORD FROM BITWARDEN +# +# Make sure to proper chmod them (e.g. chmod 600) +# +# Add the following line to your /etc/fstab and edit YOUR_USERNAME +# +# //cluster-ho/Ampel /tmp/remote-ampel cifs credentials=/home/YOUR_USERNAME/.smbcredentials,user,noauto,workgroup=ZFD,dir_mode=0777,file_mode=0777,_netdev 0 0 +# +# setuid might be necessary on /usr/sbin/mount.cifs. Set it as root with +# +# chmod u+s /usr/sbin/mount.cifs -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" +AMPEL_MOUNT=/tmp/remote-ampel -# 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." +if [ -f ~/.remote-admin ]; then + source ~/.remote-admin else - log "Mounting $AMPEL_MOUNT..." - if ! mount "$AMPEL_MOUNT"; then - log "Mount failed. Check share configuration." - exit 4 - fi - log "Mount successful." + echo ".remote-admin not found! Please create it!" + exit 4 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 +if [ ! -f ~/.smbcredentials ]; then + echo ".smbcredentials not found! Please create it!" + exit 5 +fi +# Check for xfreerdp +if [ ! -f /usr/bin/xfreerdp ]; then + print "xfreerdp not found. Make sure it is installed" + exit 1 +else # check for the mount point + mkdir -p $AMPEL_MOUNT + if grep -qs $AMPEL_MOUNT /proc/mounts; then + echo "$AMPEL_MOUNT already mounted." + else + echo "Trying to mount $AMPEL_MOUNT" + mount $AMPEL_MOUNT + if [ $? -eq 0 ]; then + echo "Mount successful." + else + echo "Mount failed. Check share" + exit 2 + fi + fi +fi +sleep 2 +for i in $(ls $AMPEL_MOUNT) +do + if [[ $i == *"FREE"* ]]; then + RDP=$(echo $i | cut -f1,2 -d'-') + echo "$RDP is free :)" + xfreerdp /u:$USERNAME /p:$PASSWORD /v:$RDP.zfd.forumzfd.de /dynamic-resolution + umount $AMPEL_MOUNT + echo 'Connection closed. Bye' + exit 0 + fi done - -log "No Remote-Admin is free. Try again later." +echo 'No Remote-Admin is free. :( Try again later.' +umount $AMPEL_MOUNT exit 0