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