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) USERNAME=administrator@zfd.forumzfd.de
* `~/.remote-admin` (for RDP login) 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
``` //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
username=YOUR_AD_USERNAME
password=YOUR_AD_PASSWORD
```
**Important:** Set secure file permissions: setuid might be necessary on /usr/sbin/mount.cifs. Set it as root with
```bash chmod u+s /usr/sbin/mount.cifs
chmod 600 ~/.smbcredentials
```
### \~/.remote-admin Make sure you have xfreerdp installed on your computer.
```
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! ✨

145
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 exit 4
log "Mount failed. Check share configuration."
exit 4
fi
log "Mount successful."
fi fi
if [ ! -f ~/.smbcredentials ]; then
# Search for free remote admin PC echo ".smbcredentials not found! Please create it!"
sleep 1 exit 5
for i in "$AMPEL_MOUNT"/*; do fi
[[ "$i" == *FREE* ]] || continue # Check for xfreerdp
RDP=$(basename "$i" | cut -f1,2 -d'-') if [ ! -f /usr/bin/xfreerdp ]; then
log "$RDP is free. Starting RDP session..." print "xfreerdp not found. Make sure it is installed"
"$FREERDP_BIN" /u:"$USERNAME" /p:"$PASSWORD" /v:"$RDP.zfd.forumzfd.de" /dynamic-resolution exit 1
log "Connection closed. Bye." else # check for the mount point
exit 0 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 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