Einem anderen User einen SSH Zugang einrichten
Inhaltsverzeichnis
Als Sudo einem anderen User einen SSH Zugang einrichten. #
Dieser Artikel soll zeigen, wie man unter Linux einem anderen User einen SSH Zugang einrichten kann. Benötigt wird hierzu nur der Publik-Key, den man vorher vom anzulegenden User erhalten hat. Ein Skript ist auch gleich dabei.
Benutzer anlegen (falls noch nicht vorhanden) #
sudo useradd -m -s /bin/bash username
wobei
-m → Home-Verzeichnis anlegen (/home/username)
-s /bin/bash → Login-Shell
Prüfen:
getent passwd username
Passwort setzen #
sudo passwd username
(Das vorliegende Passwort eingeben.)
SSH-Verzeichnis anlegen #
sudo -u username mkdir -p /home/username/.ssh
sudo chmod 700 /home/username/.ssh
Warum chmod wichtig ist: SSH ist sehr strikt bei Rechten.
Public Key hinterlegen #
sudo -u username vim /home/username/.ssh/authorized_keys
Hier nun den Public Key exakt einfügen (eine Zeile, z. B. ssh-ed25519 AAAAC3… user@host)
Rechte setzen:
sudo chmod 600 /home/username/.ssh/authorized_keys
sudo chown -R username:username /home/username/.ssh
SSH-Server-Config prüfen (wichtig!) #
sudo vim /etc/ssh/sshd_config
Mindestens sicherstellen:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes # falls Passwortlogin erlaubt sein soll
Optional (Best Practice):
PermitRootLogin no
Reload (kein Reboot nötig):
sudo systemctl reload sshd
oder (Debian/Ubuntu):
sudo systemctl reload ssh
Test (von einem anderen Host) #
ssh username@server-ip
Oder explizit mit Key:
ssh -i ~/.ssh/private_key username@server-ip
Das ganze als Skript #
Annahmen / Design:
- Script wird als root ausgeführt
- User existiert bereits (kein useradd, bewusst)
- Public Key ohne Kommentar wird übergeben
- email wird als Key-Kommentar angehängt, um Spaces zu vermeiden
- Key landet in ~/.ssh/authorized_keys
- Rechte strikt nach OpenSSH-Vorgaben
Aufruf
sudo ./setup_ssh_user.sh username "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI..." user@example.com
Script: setup_ssh_user.sh
#!/usr/bin/env bash
set -euo pipefail
# ----------------------------
# Parameter
# ----------------------------
USERNAME="${1:-}"
PUBKEY="${2:-}"
EMAIL="${3:-}"
# ----------------------------
# Checks
# ----------------------------
if [[ -z "$USERNAME" || -z "$PUBKEY" || -z "$EMAIL" ]]; then
echo "Usage: $0 <username> <public_key_without_comment> <email>"
exit 1
fi
if [[ "$(id -u)" -ne 0 ]]; then
echo "Error: This script must be run as root"
exit 1
fi
if ! id "$USERNAME" &>/dev/null; then
echo "Error: User '$USERNAME' does not exist"
exit 1
fi
HOME_DIR="$(getent passwd "$USERNAME" | cut -d: -f6)"
SSH_DIR="$HOME_DIR/.ssh"
AUTH_KEYS="$SSH_DIR/authorized_keys"
# ----------------------------
# Create .ssh directory
# ----------------------------
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"
chown "$USERNAME:$USERNAME" "$SSH_DIR"
# ----------------------------
# Write authorized_keys
# ----------------------------
echo "$PUBKEY $EMAIL" > "$AUTH_KEYS"
chmod 600 "$AUTH_KEYS"
chown "$USERNAME:$USERNAME" "$AUTH_KEYS"
# ----------------------------
# Done
# ----------------------------
echo "SSH key installed for user '$USERNAME'"
echo " Home: $HOME_DIR"
echo " Key comment: $EMAIL"
Warum das hilft: #
- set -euo pipefail → Script bricht bei jedem Fehler ab
- keine stillen Defaults
- keine Key-Duplikate, kein Append-Chaos
- Email kontrolliert als Kommentar
- SSH-Rechte exakt (700 / 600)
- Home-Pfad korrekt über getent (nicht geraten)
Optional: mehrere Keys erlauben #
Will man mehrere Keys erlauben, so muss man sie eben auch anfügen. Dazu müssen wir das Skript wie folgt anpassen:
ersetzen:
echo "$PUBKEY $EMAIL" > "$AUTH_KEYS"
durch:
grep -qxF "$PUBKEY $EMAIL" "$AUTH_KEYS" 2>/dev/null || echo "$PUBKEY $EMAIL" >> "$AUTH_KEYS"
Viel Erfolg!