Težave z dostopom SSH s strežnikom Gitea, ki ga gosti sam

Temp mail SuperHeros
Težave z dostopom SSH s strežnikom Gitea, ki ga gosti sam
Težave z dostopom SSH s strežnikom Gitea, ki ga gosti sam

Reševanje težav z dostopom SSH z Giteo

Pred kratkim sem nastavil strežnik Gitea z vsebnikom Docker na svojem lokalnem računalniku. Za zaščito povezave sem konfiguriral tudi obratni proxy Nginx s SSL, ki ga zagotavlja Certbot.

Kljub temu, da sem sledil vadnicam za ustvarjanje ključev SSH iz Gitea in GitHub, sem pri poskusu povezave s strežnikom Gitea naletel na napake zavrnjenega dovoljenja. Ta članek raziskuje korake, ki sem jih sprejel, in metode za odpravljanje težav, ki sem jih uporabil za rešitev težav z dostopom do SSH.

Ukaz Opis
ssh-keygen Ustvari nov par ključev SSH za varne povezave.
eval "$(ssh-agent -s)" Zažene agenta SSH v ozadju za upravljanje ključev SSH.
ssh-add ~/.ssh/id_rsa Doda ustvarjeni zasebni ključ SSH agentu SSH.
pbcopy < ~/.ssh/id_rsa.pub Kopira javni ključ SSH v odložišče v sistemih macOS.
xclip -sel clip < ~/.ssh/id_rsa.pub Kopira javni ključ SSH v odložišče v sistemih Linux z uporabo xclip.
proxy_pass Usmeri zahtevo na navedeni zaledni strežnik v konfiguraciji Nginx.
paramiko.RSAKey.from_private_key_file Naloži zasebni ključ RSA iz datoteke z uporabo Paramiko v Pythonu.
paramiko.SSHClient().set_missing_host_key_policy Samodejno doda ključ gostitelja strežnika brez poziva uporabnika.
chmod 600 ~/.ssh/config Nastavi pravilna dovoljenja za konfiguracijsko datoteko SSH, da jo zaščiti.

Odpravljanje težav s povezavo SSH

Skripti v prejšnjih primerih so zasnovani tako, da obravnavajo različne vidike nastavitve in odpravljanja težav s preverjanjem pristnosti ključa SSH za strežnik Gitea. Prvi skript uporablja skript Bash za ustvarjanje ključa SSH ssh-keygen, ga dodajte agentu SSH z ssh-addin kopirajte javni ključ v odložišče z bodisi pbcopy oz xclip. Ti koraki so ključni za zagotovitev, da je ključ SSH pravilno nastavljen in na voljo za uporabo. Drugi skript konfigurira Nginx, da obrne proxy zahteve na strežnik Gitea, s čimer zagotovi, da se SSL pravilno obravnava in se zahteve pravilno posredujejo z proxy_pass.

Skript Python v tretjem primeru uporablja knjižnico Paramiko za testiranje povezljivosti SSH. Ta skript naloži zasebni ključ z uporabo paramiko.RSAKey.from_private_key_file in se poskuša povezati s strežnikom Gitea. Če povezava ne uspe, prikaže sporočilo o napaki, ki pomaga pri diagnosticiranju težave. Četrti skript vključuje posodobitev konfiguracijske datoteke SSH, da se zagotovi pravilne nastavitve. Ukazi kot Host, HostName, User, in IdentityFile se uporabljajo za določanje podrobnosti povezave za strežnik Gitea. končno, chmod 600 ~/.ssh/config nastavi ustrezna dovoljenja za konfiguracijsko datoteko, da jo zavaruje.

Nastavitev avtentikacije ključa SSH za Gitea

Uporaba skripta Bash za konfiguracijo sprednjega dela

# 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

Konfiguriranje Nginx Reverse Proxy za Gitea

Uporaba konfiguracijske datoteke Nginx

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;
    }
}

Diagnosticiranje težav s povezavo SSH

Uporaba skripta Python za preizkus povezljivosti SSH

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')

Posodabljanje konfiguracije SSH za Gitea

Uporaba konfiguracijske datoteke SSH

# 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

Napredno upravljanje ključev SSH za Gitea

Drug pomemben vidik upravljanja ključev SSH za strežnik Gitea je pravilno ravnanje s ključi in rotacija ključev. Redno menjavanje vaših ključev SSH lahko poveča varnost z zmanjšanjem tveganja, da bi se ogroženi ključ uporabljal za nedoločen čas. Z uporabo lahko ustvarite nov par ključev ssh-keygen in posodobite nastavitve Gitea, da odražajo nov ključ. Ta praksa je ključnega pomena za ohranjanje varnega dostopa do vašega strežnika skozi čas. Poleg tega je pomembno zagotoviti, da so vaši ključi SSH varno shranjeni in niso izpostavljeni nepooblaščenim uporabnikom. Uporabite orodja, kot je ssh-agent za varno upravljanje ključev v pomnilniku in izogibanje puščanju zasebnih ključev na disku v nezaščitenem stanju.

Izvajanje strogih dovoljenj za vaše ključe SSH in konfiguracijske datoteke je še en sloj varnosti. Ukazi kot chmod 600 ~/.ssh/id_rsa in chmod 600 ~/.ssh/config omejiti dostop do teh datotek, kar nepooblaščenim uporabnikom oteži dostop. Poleg tega lahko uporabite večfaktorsko avtentikacijo (MFA), da dodate dodatno plast varnosti vaši uporabi ključa SSH. Orodja, kot je Google Authenticator ali strojni žetoni, je mogoče integrirati v vašo nastavitev SSH, da zahtevajo drugo obliko preverjanja, zaradi česar je nepooblaščen dostop še večji izziv.

Pogosta vprašanja in rešitve za težave z dostopom do SSH

  1. Zakaj dobivam napako "Dovoljenje zavrnjeno"?
  2. Prepričajte se, da so vaši ključi SSH pravilno dodani agentu SSH in da je javni ključ dodan pooblaščenim ključem vašega strežnika Gitea.
  3. Kako ustvarim nov par ključev SSH?
  4. Uporabite ukaz ssh-keygen -t rsa -b 4096 -C "your_email@example.com" za ustvarjanje novega para ključev SSH.
  5. Kako dodam svoj ključ SSH ssh-agentu?
  6. Uporabite ukaz eval "$(ssh-agent -s)" za zagon agenta in ssh-add ~/.ssh/id_rsa da dodate svoj ključ.
  7. Kako lahko svoj javni ključ SSH kopiram v odložišče?
  8. Uporaba pbcopy < ~/.ssh/id_rsa.pub na macOS oz xclip -sel clip < ~/.ssh/id_rsa.pub v sistemu Linux.
  9. Kaj naj storim, če je moj ključ SSH ogrožen?
  10. Ustvarite nov par ključev SSH in posodobite ključe v vašem strežniku Gitea in vseh drugih storitvah, kjer je bil ključ uporabljen.
  11. Kako lahko nastavim pravilna dovoljenja za datoteke ključev SSH?
  12. Uporabite ukaz chmod 600 ~/.ssh/id_rsa da nastavite ustrezna dovoljenja za datoteko z zasebnim ključem.
  13. Zakaj moji povezavi SSH poteče čas?
  14. Preverite omrežno povezavo, zagotovite, da strežnik Gitea deluje in da so vrata SSH odprta in dostopna.
  15. Kako preizkusim svojo SSH povezavo s strežnikom?
  16. Uporabite ukaz ssh -T your_username@your_domain da preizkusite povezavo.

Zadnji koraki za varno povezavo SSH

Skratka, vzpostavitev zanesljive povezave SSH s strežnikom Gitea zahteva skrbno konfiguracijo ključev SSH, nastavitev proxy Nginx in stroge varnostne prakse. Z upoštevanjem opisanih korakov, vključno z ustvarjanjem in upravljanjem ključev SSH, nastavitvijo ustreznih dovoljenj in pravilno konfiguracijo Nginx, lahko uporabniki zagotovijo varno in funkcionalno nastavitev. Preizkušanje povezav z orodji, kot je Paramiko, in redno menjajočimi se ključi dodatno povečuje varnost in zanesljivost. Celovito obravnavanje teh elementov pomaga pri reševanju težav s povezavo in ohranjanju varnega razvojnega okolja.