Compare commits
No commits in common. "27441fca2f9ad7e76e1903f4b491a9359d7a191f" and "aae534cb386cbf609b55aa6793fa31c486016c1f" have entirely different histories.
27441fca2f
...
aae534cb38
2 changed files with 76 additions and 160 deletions
87
README.md
87
README.md
|
@ -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
139
remote-admin.sh
Executable file → Normal 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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue