Zum Hauptinhalt springen
  1. Artikel/

Einem anderen User einen SSH Zugang einrichten

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!