Problemy z dostępem SSH na własnym serwerze Gitea

Temp mail SuperHeros
Problemy z dostępem SSH na własnym serwerze Gitea
Problemy z dostępem SSH na własnym serwerze Gitea

Rozwiązywanie problemów z dostępem SSH w Gitea

Niedawno skonfigurowałem serwer Gitea przy użyciu kontenera Docker na moim komputerze lokalnym. Aby zabezpieczyć połączenie, skonfigurowałem także odwrotne proxy Nginx z SSL dostarczonym przez Certbot.

Pomimo korzystania z samouczków dotyczących generowania kluczy SSH z Gitea i GitHub, podczas próby połączenia się z serwerem Gitea napotkałem błędy odmowy uprawnień. W tym artykule omówiono kroki, które podjąłem i metody rozwiązywania problemów zastosowane w celu rozwiązania problemów z dostępem SSH.

Komenda Opis
ssh-keygen Generuje nową parę kluczy SSH dla bezpiecznych połączeń.
eval "$(ssh-agent -s)" Uruchamia agenta SSH w tle w celu zarządzania kluczami SSH.
ssh-add ~/.ssh/id_rsa Dodaje wygenerowany klucz prywatny SSH do agenta SSH.
pbcopy < ~/.ssh/id_rsa.pub Kopiuje klucz publiczny SSH do schowka w systemach macOS.
xclip -sel clip < ~/.ssh/id_rsa.pub Kopiuje klucz publiczny SSH do schowka w systemach Linux za pomocą xclip.
proxy_pass Kieruje żądanie do określonego serwera zaplecza w konfiguracji Nginx.
paramiko.RSAKey.from_private_key_file Ładuje klucz prywatny RSA z pliku przy użyciu Paramiko w Pythonie.
paramiko.SSHClient().set_missing_host_key_policy Automatycznie dodaje klucz hosta serwera bez monitowania użytkownika.
chmod 600 ~/.ssh/config Ustawia prawidłowe uprawnienia dla pliku konfiguracyjnego SSH w celu jego zabezpieczenia.

Rozwiązywanie problemów z połączeniem SSH

Skrypty przedstawione w poprzednich przykładach mają na celu omówienie różnych aspektów konfiguracji i rozwiązywania problemów z uwierzytelnianiem za pomocą klucza SSH dla serwera Gitea. Pierwszy skrypt używa skryptu Bash do wygenerowania klucza SSH ssh-keygen, dodaj go do agenta SSH za pomocą ssh-addi skopiuj klucz publiczny do schowka za pomocą jednego z nich pbcopy Lub xclip. Te kroki są kluczowe dla zapewnienia, że ​​klucz SSH jest poprawnie skonfigurowany i dostępny do użycia. Drugi skrypt konfiguruje Nginx tak, aby odwracał żądania proxy kierowane do serwera Gitea, zapewniając prawidłową obsługę protokołu SSL i prawidłowe przekazywanie żądań za pomocą proxy_pass.

Skrypt Pythona w trzecim przykładzie używa biblioteki Paramiko do testowania łączności SSH. Ten skrypt ładuje klucz prywatny za pomocą paramiko.RSAKey.from_private_key_file i próbuje połączyć się z serwerem Gitea. Jeśli połączenie nie powiedzie się, zostanie wyświetlony komunikat o błędzie, który pomoże zdiagnozować problem. Czwarty skrypt polega na aktualizacji pliku konfiguracyjnego SSH w celu zapewnienia poprawnych ustawień. Polecenia takie jak Host, HostName, User, I IdentityFile służą do określenia szczegółów połączenia z serwerem Gitea. Wreszcie, chmod 600 ~/.ssh/config ustawia odpowiednie uprawnienia do pliku konfiguracyjnego, aby go zabezpieczyć.

Konfigurowanie uwierzytelniania kluczem SSH dla Gitea

Używanie skryptu Bash do konfiguracji frontonu

# 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

Konfigurowanie odwrotnego proxy Nginx dla Gitea

Korzystanie z pliku konfiguracyjnego 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;
    }
}

Diagnozowanie problemów z połączeniem SSH

Używanie skryptu Pythona do testowania łączności 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')

Aktualizowanie konfiguracji SSH dla Gitea

Korzystanie z pliku konfiguracyjnego 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

Zaawansowane zarządzanie kluczami SSH dla Gitea

Kolejnym ważnym aspektem zarządzania kluczami SSH dla serwera Gitea jest właściwa obsługa i rotacja kluczy. Regularna zmiana kluczy SSH może zwiększyć bezpieczeństwo, zmniejszając ryzyko nieustannego używania złamanego klucza. Możesz utworzyć nową parę kluczy za pomocą ssh-keygen i zaktualizuj ustawienia Gitea, aby odzwierciedlały nowy klucz. Praktyka ta ma kluczowe znaczenie dla utrzymania bezpiecznego dostępu do serwera w miarę upływu czasu. Ponadto istotne jest zapewnienie bezpiecznego przechowywania kluczy SSH i nieujawniania ich nieupoważnionym użytkownikom. Użyj narzędzi takich jak ssh-agent aby bezpiecznie zarządzać kluczami w pamięci i uniknąć pozostawiania kluczy prywatnych na dysku w stanie niezabezpieczonym.

Implementacja ścisłych uprawnień do kluczy SSH i plików konfiguracyjnych to kolejna warstwa bezpieczeństwa. Polecenia takie jak chmod 600 ~/.ssh/id_rsa I chmod 600 ~/.ssh/config ograniczać dostęp do tych plików, utrudniając uzyskanie dostępu nieupoważnionym użytkownikom. Ponadto możesz użyć uwierzytelniania wieloskładnikowego (MFA), aby dodać dodatkową warstwę bezpieczeństwa do użycia klucza SSH. Narzędzia takie jak Google Authenticator lub tokeny sprzętowe można zintegrować z konfiguracją SSH, aby wymagać drugiej formy weryfikacji, co jeszcze bardziej utrudnia nieautoryzowany dostęp.

Często zadawane pytania i rozwiązania problemów z dostępem SSH

  1. Dlaczego pojawia się błąd „Odmowa uprawnień”?
  2. Upewnij się, że Twoje klucze SSH zostały poprawnie dodane do agenta SSH i że klucz publiczny został dodany do autoryzowanych kluczy Twojego serwera Gitea.
  3. Jak wygenerować nową parę kluczy SSH?
  4. Użyj polecenia ssh-keygen -t rsa -b 4096 -C "your_email@example.com" aby wygenerować nową parę kluczy SSH.
  5. Jak dodać klucz SSH do agenta ssh?
  6. Użyj polecenia eval "$(ssh-agent -s)" aby uruchomić agenta i ssh-add ~/.ssh/id_rsa aby dodać swój klucz.
  7. Jak mogę skopiować klucz publiczny SSH do schowka?
  8. Używać pbcopy < ~/.ssh/id_rsa.pub na macOS lub xclip -sel clip < ~/.ssh/id_rsa.pub na Linuksie.
  9. Co powinienem zrobić, jeśli mój klucz SSH zostanie naruszony?
  10. Wygeneruj nową parę kluczy SSH i zaktualizuj klucze na swoim serwerze Gitea oraz we wszystkich innych usługach, w których klucz był używany.
  11. Jak ustawić prawidłowe uprawnienia do plików kluczy SSH?
  12. Użyj polecenia chmod 600 ~/.ssh/id_rsa aby ustawić odpowiednie uprawnienia do pliku klucza prywatnego.
  13. Dlaczego upłynął limit czasu mojego połączenia SSH?
  14. Sprawdź połączenie sieciowe, upewnij się, że serwer Gitea działa oraz że port SSH jest otwarty i dostępny.
  15. Jak przetestować połączenie SSH z serwerem?
  16. Użyj polecenia ssh -T your_username@your_domain aby przetestować połączenie.

Ostatnie kroki w celu zabezpieczenia połączenia SSH

Podsumowując, ustanowienie niezawodnego połączenia SSH z serwerem Gitea wymaga starannej konfiguracji kluczy SSH, ustawień proxy Nginx i rygorystycznych praktyk bezpieczeństwa. Postępując zgodnie z opisanymi krokami, w tym generując klucze SSH i zarządzając nimi, ustawiając odpowiednie uprawnienia i poprawnie konfigurując Nginx, użytkownicy mogą zapewnić bezpieczną i funkcjonalną konfigurację. Testowanie połączeń za pomocą narzędzi takich jak Paramiko i regularnie obracających się kluczy dodatkowo zwiększa bezpieczeństwo i niezawodność. Kompleksowe zajęcie się tymi elementami pomaga w rozwiązywaniu problemów z połączeniem i utrzymywaniu bezpiecznego środowiska programistycznego.