fix deploy race condition and harden security
Deploy nginx / deploy (push) Successful in 5s

- reorder app.sh to run cert before commit/push (fixes workflow failure on first run)
- quote $SSH_ORIGINAL_COMMAND in authorized_keys to prevent command injection
- add port validation in service.sh nginx command
- pin host key in deploy-beszel.yml workflow
- fix append vs overwrite for known_hosts in deploy-nginx.yml
This commit is contained in:
2026-04-10 15:00:10 -04:00
parent 900900a95b
commit 5e85de9130
5 changed files with 10 additions and 5 deletions
+2 -1
View File
@@ -13,6 +13,7 @@ jobs:
- name: Deploy via SSH - name: Deploy via SSH
run: | run: |
mkdir -p ~/.ssh mkdir -p ~/.ssh
echo "${{ vars.DEPLOY_HOST_KEY }}" > ~/.ssh/known_hosts
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-beszel ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-beszel
+1 -2
View File
@@ -15,8 +15,7 @@ jobs:
- name: Deploy via SSH - name: Deploy via SSH
run: | run: |
mkdir -p ~/.ssh mkdir -p ~/.ssh
echo "${{ vars.DEPLOY_HOST_KEY }}" >> ~/.ssh/known_hosts echo "${{ vars.DEPLOY_HOST_KEY }}" > ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key
ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-nginx ssh -o StrictHostKeyChecking=yes -i ~/.ssh/deploy_key deploy@${{ vars.DEPLOY_HOST }} deploy-nginx
+1 -1
View File
@@ -99,7 +99,7 @@ fi
echo "==> Setting up deploy SSH key..." echo "==> Setting up deploy SSH key..."
mkdir -p /home/deploy/.ssh mkdir -p /home/deploy/.ssh
chmod 700 /home/deploy/.ssh chmod 700 /home/deploy/.ssh
echo "command=\"sudo /opt/hantim/scripts/deploy.sh \$SSH_ORIGINAL_COMMAND\",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty $DEPLOY_PUBKEY" > /home/deploy/.ssh/authorized_keys echo "command=\"sudo /opt/hantim/scripts/deploy.sh \\\"\$SSH_ORIGINAL_COMMAND\\\"\",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty $DEPLOY_PUBKEY" > /home/deploy/.ssh/authorized_keys
chmod 600 /home/deploy/.ssh/authorized_keys chmod 600 /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh chown -R deploy:deploy /home/deploy/.ssh
+1 -1
View File
@@ -529,6 +529,7 @@ cmd_monitor() {
cmd_all() { cmd_all() {
cmd_dns cmd_dns
cmd_repo cmd_repo
cmd_cert
cmd_files cmd_files
echo "==> Committing and pushing hantim-server..." echo "==> Committing and pushing hantim-server..."
@@ -541,7 +542,6 @@ cmd_all() {
git push git push
fi fi
cmd_cert
cmd_garage cmd_garage
cmd_build cmd_build
cmd_verify cmd_verify
+5
View File
@@ -256,6 +256,11 @@ cmd_nginx() {
local port="$2" local port="$2"
local fqdn="$name.hantim.net" local fqdn="$name.hantim.net"
if ! [[ "$port" =~ ^[0-9]+$ ]]; then
echo "Error: port must be a number."
exit 1
fi
if [ -e "$REPO_ROOT/docker/nginx/conf.d/$fqdn.conf" ]; then if [ -e "$REPO_ROOT/docker/nginx/conf.d/$fqdn.conf" ]; then
echo " docker/nginx/conf.d/$fqdn.conf already exists, skipping." echo " docker/nginx/conf.d/$fqdn.conf already exists, skipping."
return return