Compare commits

..

No commits in common. "27441fca2f9ad7e76e1903f4b491a9359d7a191f" and "aae534cb386cbf609b55aa6793fa31c486016c1f" have entirely different histories.

2 changed files with 76 additions and 160 deletions

View file

@ -1,90 +1,29 @@
# README ## README
This repository contains some more or less usefull linux scripts. ;) This repository contains some more or less usefull linux scripts. ;)
**`remote-admin.sh`** **`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 .remote-admin
* FreeRDP (either `xfreerdp` or `wfreerdp`)
* Access to the SMB share `//cluster-ho/Ampel`
* Two configuration files:
* `~/.smbcredentials` (for SMB access)
* `~/.remote-admin` (for RDP login)
## Configuration Files
### \~/.smbcredentials
```
username=YOUR_AD_USERNAME
password=YOUR_AD_PASSWORD
```
**Important:** Set secure file permissions:
```bash
chmod 600 ~/.smbcredentials
```
### \~/.remote-admin
```
USERNAME=administrator@zfd.forumzfd.de USERNAME=administrator@zfd.forumzfd.de
PASSWORD=YOUR_ADMIN_PASSWORD PASSWORD=AD ADMIN PASSWORD FROM BITWARDEN
```
**Secure this file too:** Make sure to proper chmod them (e.g. `chmod 600`)
```bash Add the following line to your /etc/fstab and edit YOUR_USERNAME
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 //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). setuid might be necessary on /usr/sbin/mount.cifs. Set it as root with
## Preparing mount.cifs chmod u+s /usr/sbin/mount.cifs
To allow regular users to mount the share, `mount.cifs` must have the `setuid` bit: Make sure you have xfreerdp installed on your computer.
```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! ✨

139
remote-admin.sh Executable file → Normal file
View file

@ -1,92 +1,69 @@
#!/bin/bash #!/bin/bash
# Enhanced remote-admin connection script # This script checks for the next free remote-admin pc and established a RDP session using xfreerdp to it.
# Checks for free remote-admin PC via SMB share and launches RDP connection # 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" 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 if [ -f ~/.remote-admin ]; then
log() { source ~/.remote-admin
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 else
log "Mounting $AMPEL_MOUNT..." echo ".remote-admin not found! Please create it!"
if ! mount "$AMPEL_MOUNT"; then
log "Mount failed. Check share configuration."
exit 4 exit 4
fi fi
log "Mount successful." if [ ! -f ~/.smbcredentials ]; then
echo ".smbcredentials not found! Please create it!"
exit 5
fi fi
# Check for xfreerdp
# Search for free remote admin PC if [ ! -f /usr/bin/xfreerdp ]; then
sleep 1 print "xfreerdp not found. Make sure it is installed"
for i in "$AMPEL_MOUNT"/*; do exit 1
[[ "$i" == *FREE* ]] || continue else # check for the mount point
RDP=$(basename "$i" | cut -f1,2 -d'-') mkdir -p $AMPEL_MOUNT
log "$RDP is free. Starting RDP session..." if grep -qs $AMPEL_MOUNT /proc/mounts; then
"$FREERDP_BIN" /u:"$USERNAME" /p:"$PASSWORD" /v:"$RDP.zfd.forumzfd.de" /dynamic-resolution echo "$AMPEL_MOUNT already mounted."
log "Connection closed. Bye." 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 exit 0
fi
done done
echo 'No Remote-Admin is free. :( Try again later.'
log "No Remote-Admin is free. Try again later." umount $AMPEL_MOUNT
exit 0 exit 0