From fd1e379fcf283f36e587799e46f0fe16526ddd97 Mon Sep 17 00:00:00 2001 From: Zebreus Date: Sun, 25 Oct 2026 14:01:27 +0100 Subject: [PATCH] Keep the files for the server in one directory The resources were copied from home/ and admin/, which held the same files a second time. Everything that goes to the server is in resources/ now, and the generator only writes the four text files. Co-Authored-By: Claude Code --- server/README.md | 16 ++++++-------- server/admin/.ssh/authorized_keys | 1 - server/home/.ssh/authorized_keys | 2 -- server/home/.zshenv | 3 --- server/home/.zshrc | 36 ------------------------------- server/scripts/make_files.py | 24 ++++++--------------- 6 files changed, 13 insertions(+), 69 deletions(-) delete mode 100644 server/admin/.ssh/authorized_keys delete mode 100644 server/home/.ssh/authorized_keys delete mode 100644 server/home/.zshenv delete mode 100644 server/home/.zshrc diff --git a/server/README.md b/server/README.md index b329c36..89fb3c2 100644 --- a/server/README.md +++ b/server/README.md @@ -62,18 +62,16 @@ undoes that. ## This directory -- `home/` - the files that belong in the home directory of the user: `~/.zshrc`, `~/.zshenv` and the keys in - `~/.ssh/authorized_keys` - the one the website logs in with and the ones of the people who deploy. This is where - they are edited. -- `admin/` - the same for the home directory of the Administrator: the keys of the people who deploy. The key of the - website is not among them and never gets administrator rights. -- `resources/` - the copies the cleanup restores from: the files of `home/` and `admin/` and the four text files. -- `scripts/make_files.py` - builds the resources. +- `resources/` - everything that goes to the server: `home/` for the home directory of the root user - `~/.zshrc`, + `~/.zshenv`, the keys in `~/.ssh/authorized_keys` and the four text files - and `admin/` for the home directory + of the Administrator, which holds the keys of the people who deploy. The key of the website is not among them and + never gets administrator rights. +- `scripts/make_files.py` - builds the four text files. - `scripts/deploy.sh` - deploys the cleanup to the server and installs it. - `scripts/install_restore_task.ps1` - installs the scheduled task. - `scripts/restore_ssh_access.cmd` - puts the SSH access back, for when the home directory was deleted. -The resources are built from the website's pages and the files of `home/`: +The four text files are built from the website's pages, the other files in the resources are edited by hand: python3 server/scripts/make_files.py @@ -85,7 +83,7 @@ The script logs in as `Administrator` - whose shell is a Windows one - copies th Administrator's home directory and runs the installer there. It logs in with the personal key of the deployer, from the agent or from `-i`; the key of the website never gets administrator rights, it only logs in as the root user. It checks the host key against the one the website pins, and that the key of the website is the first one in -`home/.ssh/authorized_keys`. `--uninstall` removes the task again. +`resources/home/.ssh/authorized_keys`. `--uninstall` removes the task again. The installer can also be run by hand, in an elevated PowerShell on the server: diff --git a/server/admin/.ssh/authorized_keys b/server/admin/.ssh/authorized_keys deleted file mode 100644 index c6a6df9..0000000 --- a/server/admin/.ssh/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBTHzLm8QMhHIo7kFAvtAFnqpspeR3L3gM8kLoG1137 lennart@erms diff --git a/server/home/.ssh/authorized_keys b/server/home/.ssh/authorized_keys deleted file mode 100644 index 9b81cf8..0000000 --- a/server/home/.ssh/authorized_keys +++ /dev/null @@ -1,2 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDweEH8bhZAHVaAedhTVDb2j/oMEn3vm97xCwCw9LC9 root@nowhere.wirs.ing cygwin-2222 -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBTHzLm8QMhHIo7kFAvtAFnqpspeR3L3gM8kLoG1137 lennart@erms diff --git a/server/home/.zshenv b/server/home/.zshenv deleted file mode 100644 index f990c34..0000000 --- a/server/home/.zshenv +++ /dev/null @@ -1,3 +0,0 @@ -# Preset what MSYS2's /etc/profile would otherwise start a helper process for (~90 ms each here). -# TZ has to match the Windows timezone (W. Europe Standard Time). -export LANG=en_US.UTF-8 TZ=Europe/Berlin diff --git a/server/home/.zshrc b/server/home/.zshrc deleted file mode 100644 index 310de44..0000000 --- a/server/home/.zshrc +++ /dev/null @@ -1,36 +0,0 @@ -# History shared between sessions. -HISTFILE=~/.zsh_history HISTSIZE=10000 SAVEHIST=10000 -setopt share_history hist_ignore_dups hist_ignore_space interactive_comments auto_cd - -# Completion: menu, case-insensitive, colored. -C skips compaudit, which is slow on -# Windows and meaningless under MSYS2's noacl mounts (rm ~/.zcompdump after adding completions). -autoload -Uz compinit && compinit -C -zstyle ':completion:*' menu select -zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' -zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} - -# Emacs keys; Up/Down search history for what is already typed. -bindkey -e -autoload -Uz up-line-or-beginning-search down-line-or-beginning-search -zle -N up-line-or-beginning-search && zle -N down-line-or-beginning-search -bindkey '^[[A' up-line-or-beginning-search '^[OA' up-line-or-beginning-search -bindkey '^[[B' down-line-or-beginning-search '^[OB' down-line-or-beginning-search - -# Prompt: user@host:directory, git branch, exit status of the last command if it failed. -# A literal '#' as on Linux: zsh's %# would show '%', since this root is not uid 0. -# The branch is read from .git/HEAD directly: starting git on every prompt is slow on Windows. -precmd() { - local d=$PWD head= - until [[ -e $d/.git || $d == / ]]; do d=${d:h}; done - [[ -f $d/.git/HEAD ]] && read -r head < $d/.git/HEAD - [[ $head == 'ref: '* ]] && git_branch=${head#ref: refs/heads/} || git_branch=${head:0:7} - print -Pn '\e]0;%n@%m: %~\a' -} -setopt prompt_subst -PROMPT='%F{green}%n@%m%f:%F{blue}%~%f${git_branch:+ %5F($git_branch)%f}%(?.. %F{red}[%?]%f)# ' - -alias ls='ls --color=auto' ll='ls -lah' grep='grep --color=auto' - -# Process monitor: htop does not exist for MSYS2 (its /proc only shows MSYS2 processes). -# bottom is a native Windows program; winpty lets it draw in the pty, as Server 2016 has no ConPTY. -alias btm='winpty /ucrt64/bin/btm' diff --git a/server/scripts/make_files.py b/server/scripts/make_files.py index 425d54c..f716d7f 100644 --- a/server/scripts/make_files.py +++ b/server/scripts/make_files.py @@ -1,9 +1,8 @@ -# Builds the files for the home directories of the shell server in ../resources: the home of the root user with -# README, README.en, CODE_OF_CONDUCT and CODE_OF_CONDUCT.en as the website's pages in terminal text with escape -# sequences, and the files of ../home and ../admin, which are copied as they are. +# Builds the text files for the home directory of the shell server's root user in ../resources/home: README, +# README.en, CODE_OF_CONDUCT and CODE_OF_CONDUCT.en as the website's pages in terminal text with escape sequences. +# The other files there are edited by hand. # Usage: python3 server/scripts/make_files.py import pathlib -import shutil import textwrap ESC = '\x1b' @@ -331,19 +330,8 @@ COC_EN = { 'footer': [('Home', f'{SITE}en.html'), ('Legal notice', IMPRESSUM)], } -out = pathlib.Path(__file__).parent.parent / 'resources' -(out / 'home').mkdir(parents=True, exist_ok=True) +out = pathlib.Path(__file__).parent.parent / 'resources' / 'home' +out.mkdir(parents=True, exist_ok=True) for name, text in [('README', readme(DE)), ('README.en', readme(EN)), ('CODE_OF_CONDUCT', code_of_conduct(COC_DE)), ('CODE_OF_CONDUCT.en', code_of_conduct(COC_EN))]: - (out / 'home' / name).write_text(text, encoding='utf-8') -# The files of the home directories are not generated, they are copied from ../home and ../admin, where they are -# edited. -for source in 'home', 'admin': - root = pathlib.Path(__file__).parent.parent / source - for path in root.rglob('*'): - target = out / source / path.relative_to(root) - if path.is_dir(): - target.mkdir(parents=True, exist_ok=True) - else: - target.parent.mkdir(parents=True, exist_ok=True) - shutil.copyfile(path, target) + (out / name).write_text(text, encoding='utf-8')