gitea-ssh-setup.sh raw

   1  #!/usr/bin/env bash
   2  set -euo pipefail
   3  
   4  # Gitea SSH Configuration Script
   5  # Configures Gitea to use the system SSH server on port 22
   6  
   7  GITEA_BASE_DIR="/home/mleku/gitea"
   8  GITEA_USER="mleku"
   9  SSH_DIR="/home/${GITEA_USER}/.ssh"
  10  
  11  # Colors
  12  GREEN='\033[0;32m'
  13  YELLOW='\033[1;33m'
  14  RED='\033[0;31m'
  15  BLUE='\033[0;34m'
  16  NC='\033[0m'
  17  
  18  echo -e "${GREEN}=== Gitea SSH Configuration Script ===${NC}"
  19  echo "Configuring Gitea to use system SSH on port 22"
  20  echo ""
  21  
  22  # Check if running as the correct user
  23  if [ "$(whoami)" != "$GITEA_USER" ]; then
  24      echo -e "${RED}Error: This script must be run as user '${GITEA_USER}'${NC}"
  25      echo "Run: sudo -u ${GITEA_USER} $0"
  26      exit 1
  27  fi
  28  
  29  # Ensure SSH directory exists
  30  echo -e "${YELLOW}Setting up SSH directory...${NC}"
  31  mkdir -p "${SSH_DIR}"
  32  chmod 700 "${SSH_DIR}"
  33  
  34  # Create SSH key if it doesn't exist
  35  if [ ! -f "${SSH_DIR}/id_ed25519" ]; then
  36      echo -e "${YELLOW}Generating SSH key for Gitea...${NC}"
  37      ssh-keygen -t ed25519 -C "gitea@$(hostname)" -f "${SSH_DIR}/id_ed25519" -N ""
  38      echo -e "${GREEN}✓ SSH key generated${NC}"
  39  else
  40      echo -e "${GREEN}✓ SSH key already exists${NC}"
  41  fi
  42  
  43  # Update Gitea configuration
  44  echo -e "${YELLOW}Updating Gitea configuration...${NC}"
  45  GITEA_CONFIG="${GITEA_BASE_DIR}/custom/conf/app.ini"
  46  
  47  if [ ! -f "$GITEA_CONFIG" ]; then
  48      echo -e "${RED}Error: Gitea configuration not found at ${GITEA_CONFIG}${NC}"
  49      exit 1
  50  fi
  51  
  52  # Backup existing config
  53  cp "${GITEA_CONFIG}" "${GITEA_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
  54  
  55  # Update SSH settings in app.ini
  56  # We'll use sed to update or add the SSH settings
  57  if grep -q "^\[server\]" "$GITEA_CONFIG"; then
  58      # Section exists, update settings
  59      sed -i '/^\[server\]/,/^\[/ {
  60          /^DISABLE_SSH/d
  61          /^SSH_DOMAIN/d
  62          /^SSH_PORT/d
  63          /^SSH_LISTEN_HOST/d
  64          /^SSH_LISTEN_PORT/d
  65          /^START_SSH_SERVER/d
  66      }' "$GITEA_CONFIG"
  67  
  68      # Add updated settings after [server] section
  69      sed -i '/^\[server\]/a\
  70  START_SSH_SERVER = false\
  71  SSH_DOMAIN       = localhost\
  72  SSH_PORT         = 22\
  73  DISABLE_SSH      = false' "$GITEA_CONFIG"
  74  else
  75      echo -e "${RED}Error: [server] section not found in config${NC}"
  76      exit 1
  77  fi
  78  
  79  echo -e "${GREEN}✓ Gitea configuration updated${NC}"
  80  
  81  # Print next steps
  82  echo ""
  83  echo -e "${GREEN}=== Configuration Complete ===${NC}"
  84  echo ""
  85  echo "Gitea has been configured to use system SSH on port 22."
  86  echo ""
  87  echo -e "${YELLOW}Next Steps:${NC}"
  88  echo ""
  89  echo "1. Restart Gitea to apply changes:"
  90  echo "   sudo systemctl restart gitea"
  91  echo ""
  92  echo "2. Add your SSH public key to Gitea:"
  93  echo "   - Log in to Gitea web interface"
  94  echo "   - Go to Settings → SSH/GPG Keys"
  95  echo "   - Click 'Add Key'"
  96  echo "   - Paste your public key (from ~/.ssh/id_ed25519.pub or id_rsa.pub)"
  97  echo ""
  98  echo "3. Test SSH access:"
  99  echo "   ssh -T git@localhost -p 22"
 100  echo "   (You should see: 'Hi there! You've successfully authenticated...')"
 101  echo ""
 102  echo "4. Clone repositories using SSH:"
 103  echo "   git clone git@your-server:mleku/repo-name.git"
 104  echo ""
 105  echo -e "${BLUE}Configuration backup saved to:${NC}"
 106  echo "   ${GITEA_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
 107  echo ""
 108