SSH-adgangsproblemer med Self-Hosted Gitea Server

Temp mail SuperHeros
SSH-adgangsproblemer med Self-Hosted Gitea Server
SSH-adgangsproblemer med Self-Hosted Gitea Server

Løsning af SSH-adgangsproblemer med Gitea

For nylig satte jeg en Gitea-server op ved hjælp af en Docker-container på min lokale maskine. For at sikre forbindelsen konfigurerede jeg også en Nginx omvendt proxy med SSL leveret af Certbot.

På trods af at jeg fulgte SSH-nøglegenereringsvejledningerne fra Gitea og GitHub, stødte jeg på fejl med tilladelsen nægtet, da jeg forsøgte at oprette forbindelse til Gitea-serveren. Denne artikel udforsker de trin, jeg tog, og de fejlfindingsmetoder, jeg brugte til at løse problemerne med SSH-adgang.

Kommando Beskrivelse
ssh-keygen Genererer et nyt SSH-nøglepar til sikre forbindelser.
eval "$(ssh-agent -s)" Starter SSH-agenten i baggrunden for at administrere SSH-nøgler.
ssh-add ~/.ssh/id_rsa Tilføjer den genererede SSH private nøgle til SSH-agenten.
pbcopy < ~/.ssh/id_rsa.pub Kopierer den offentlige SSH-nøgle til udklipsholderen på macOS-systemer.
xclip -sel clip < ~/.ssh/id_rsa.pub Kopierer den offentlige SSH-nøgle til udklipsholderen på Linux-systemer ved hjælp af xclip.
proxy_pass Sender anmodningen til den angivne backend-server i Nginx-konfiguration.
paramiko.RSAKey.from_private_key_file Indlæser en privat RSA-nøgle fra en fil ved hjælp af Paramiko i Python.
paramiko.SSHClient().set_missing_host_key_policy Tilføjer automatisk serverens værtsnøgle uden at spørge brugeren.
chmod 600 ~/.ssh/config Indstiller de korrekte tilladelser for SSH-konfigurationsfilen for at sikre den.

Fejlfinding af SSH-forbindelsesproblemer

Scriptsene i de foregående eksempler er designet til at adressere forskellige aspekter af opsætning og fejlfinding af SSH-nøglegodkendelse for en Gitea-server. Det første script bruger et Bash-script til at generere en SSH-nøgle med ssh-keygen, tilføj det til SSH-agenten med ssh-add, og kopier den offentlige nøgle til udklipsholderen med enten pbcopy eller xclip. Disse trin er afgørende for at sikre, at SSH-nøglen er korrekt sat op og tilgængelig til brug. Det andet script konfigurerer Nginx til at reversere proxy-anmodninger til Gitea-serveren, hvilket sikrer, at SSL håndteres korrekt, og anmodninger videresendes korrekt med proxy_pass.

Python-scriptet i det tredje eksempel bruger Paramiko-biblioteket til at teste SSH-forbindelse. Dette script indlæser den private nøgle vha paramiko.RSAKey.from_private_key_file og forsøger at oprette forbindelse til Gitea-serveren. Hvis forbindelsen mislykkes, giver den en fejlmeddelelse, som hjælper med at diagnosticere problemet. Det fjerde script involverer opdatering af SSH-konfigurationsfilen for at sikre, at de korrekte indstillinger er på plads. Kommandoer som Host, HostName, User, og IdentityFile bruges til at angive forbindelsesdetaljerne for Gitea-serveren. Endelig, chmod 600 ~/.ssh/config indstiller de relevante tilladelser på konfigurationsfilen for at sikre den.

Opsætning af SSH-nøglegodkendelse til Gitea

Brug af Bash Script til frontend-konfiguration

# Step 1: Generate SSH Key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Step 2: Start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Step 3: Add your SSH key to the ssh-agent
ssh-add ~/.ssh/id_rsa
# Step 4: Copy the SSH key to clipboard
pbcopy < ~/.ssh/id_rsa.pub
# If using xclip
xclip -sel clip < ~/.ssh/id_rsa.pub

Konfiguration af Nginx Reverse Proxy til Gitea

Brug af Nginx-konfigurationsfil

server {
    listen 80;
    server_name your_domain;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name your_domain;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Diagnosticering af SSH-forbindelsesproblemer

Brug af et Python-script til at teste SSH-forbindelse

import paramiko
def test_ssh_connection(host, port, username, key_path):
    k = paramiko.RSAKey.from_private_key_file(key_path)
    c = paramiko.SSHClient()
    c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        c.connect(hostname=host, port=port, username=username, pkey=k)
        print("SSH connection successful")
    except Exception as e:
        print(f"Failed to connect: {e}")
    finally:
        c.close()
test_ssh_connection('your_domain', 22, 'your_username', '/path/to/id_rsa')

Opdatering af SSH-konfiguration for Gitea

Brug af SSH-konfigurationsfil

# Open SSH config file
nano ~/.ssh/config
# Add the following configuration
Host gitea_server
    HostName your_domain
    User your_username
    IdentityFile ~/.ssh/id_rsa
# Save and exit
chmod 600 ~/.ssh/config
# Test SSH connection
ssh -T gitea_server

Avanceret SSH-nøglestyring til Gitea

Et andet vigtigt aspekt ved at administrere SSH-nøgler til en Gitea-server er den korrekte håndtering og rotation af nøgler. Regelmæssig rotation af dine SSH-nøgler kan øge sikkerheden ved at reducere risikoen for, at en kompromitteret nøgle bliver brugt på ubestemt tid. Du kan oprette et nyt nøglepar vha ssh-keygen og opdater dine Gitea-indstillinger, så de afspejler den nye nøgle. Denne praksis er afgørende for at opretholde sikker adgang til din server over tid. Derudover er det vigtigt at sikre, at dine SSH-nøgler opbevares sikkert og ikke udsættes for uautoriserede brugere. Brug værktøjer som f.eks ssh-agent at administrere nøgler sikkert i hukommelsen og undgå at efterlade private nøgler på disken i en ubeskyttet tilstand.

Implementering af strenge tilladelser på dine SSH-nøgler og konfigurationsfiler er endnu et sikkerhedslag. Kommandoer som chmod 600 ~/.ssh/id_rsa og chmod 600 ~/.ssh/config begrænse adgangen til disse filer, hvilket gør det sværere for uautoriserede brugere at få adgang. Desuden kan du bruge multi-factor authentication (MFA) til at tilføje et ekstra lag af sikkerhed til din SSH-nøglebrug. Værktøjer som Google Authenticator eller hardware-tokens kan integreres med din SSH-opsætning for at kræve en anden form for verifikation, hvilket gør uautoriseret adgang endnu mere udfordrende.

Almindelige spørgsmål og løsninger til SSH-adgangsproblemer

  1. Hvorfor får jeg fejlen "Tilladelse nægtet"?
  2. Sørg for, at dine SSH-nøgler er korrekt tilføjet til SSH-agenten, og at den offentlige nøgle er tilføjet til din Gitea-servers autoriserede nøgler.
  3. Hvordan genererer jeg et nyt SSH-nøglepar?
  4. Brug kommandoen ssh-keygen -t rsa -b 4096 -C "your_email@example.com" for at generere et nyt SSH-nøglepar.
  5. Hvordan tilføjer jeg min SSH-nøgle til ssh-agenten?
  6. Brug kommandoen eval "$(ssh-agent -s)" at starte agenten og ssh-add ~/.ssh/id_rsa for at tilføje din nøgle.
  7. Hvordan kan jeg kopiere min offentlige SSH-nøgle til udklipsholderen?
  8. Brug pbcopy < ~/.ssh/id_rsa.pub på macOS eller xclip -sel clip < ~/.ssh/id_rsa.pub på Linux.
  9. Hvad skal jeg gøre, hvis min SSH-nøgle er kompromitteret?
  10. Generer et nyt SSH-nøglepar og opdater nøglerne i din Gitea-server og alle andre tjenester, hvor nøglen blev brugt.
  11. Hvordan kan jeg indstille de korrekte tilladelser på mine SSH-nøglefiler?
  12. Brug kommandoen chmod 600 ~/.ssh/id_rsa for at indstille de korrekte tilladelser på din private nøglefil.
  13. Hvorfor ophører min SSH-forbindelse?
  14. Tjek din netværksforbindelse, sørg for, at Gitea-serveren kører, og at SSH-porten er åben og tilgængelig.
  15. Hvordan tester jeg min SSH-forbindelse til serveren?
  16. Brug kommandoen ssh -T your_username@your_domain for at teste forbindelsen.

Sidste trin for at sikre SSH-forbindelse

Afslutningsvis kræver etablering af en pålidelig SSH-forbindelse til en Gitea-server omhyggelig konfiguration af SSH-nøgler, Nginx-proxy-indstillinger og strenge sikkerhedsforanstaltninger. Ved at følge de skitserede trin, herunder generere og administrere SSH-nøgler, indstille passende tilladelser og konfigurere Nginx korrekt, kan brugerne sikre en sikker og funktionel opsætning. Test af forbindelser med værktøjer som Paramiko og regelmæssigt roterende nøgler øger sikkerheden og pålideligheden yderligere. At adressere disse elementer omfattende hjælper med at løse forbindelsesproblemer og opretholde et sikkert udviklingsmiljø.