Masalah Akses SSH dengan Server Gitea yang Dihosting Sendiri

Temp mail SuperHeros
Masalah Akses SSH dengan Server Gitea yang Dihosting Sendiri
Masalah Akses SSH dengan Server Gitea yang Dihosting Sendiri

Menyelesaikan Masalah Akses SSH dengan Gitea

Baru-baru ini, saya menyiapkan server Gitea menggunakan container Docker di mesin lokal saya. Untuk mengamankan koneksi, saya juga mengkonfigurasi reverse proxy Nginx dengan SSL yang disediakan oleh Certbot.

Meskipun mengikuti tutorial pembuatan kunci SSH dari Gitea dan GitHub, saya mengalami kesalahan izin ditolak saat mencoba menyambung ke server Gitea. Artikel ini membahas langkah-langkah yang saya ambil dan metode pemecahan masalah yang saya gunakan untuk menyelesaikan masalah akses SSH.

Memerintah Keterangan
ssh-keygen Menghasilkan pasangan kunci SSH baru untuk koneksi aman.
eval "$(ssh-agent -s)" Memulai agen SSH di latar belakang untuk mengelola kunci SSH.
ssh-add ~/.ssh/id_rsa Menambahkan kunci pribadi SSH yang dihasilkan ke agen SSH.
pbcopy < ~/.ssh/id_rsa.pub Menyalin kunci publik SSH ke clipboard pada sistem macOS.
xclip -sel clip < ~/.ssh/id_rsa.pub Menyalin kunci publik SSH ke clipboard pada sistem Linux menggunakan xclip.
proxy_pass Mengarahkan permintaan ke server backend yang ditentukan dalam konfigurasi Nginx.
paramiko.RSAKey.from_private_key_file Memuat kunci pribadi RSA dari file menggunakan Paramiko dengan Python.
paramiko.SSHClient().set_missing_host_key_policy Secara otomatis menambahkan kunci host server tanpa meminta pengguna.
chmod 600 ~/.ssh/config Menetapkan izin yang benar untuk file konfigurasi SSH untuk mengamankannya.

Memecahkan Masalah Koneksi SSH

Skrip yang diberikan pada contoh sebelumnya dirancang untuk mengatasi berbagai aspek pengaturan dan pemecahan masalah otentikasi kunci SSH untuk server Gitea. Skrip pertama menggunakan skrip Bash untuk menghasilkan kunci SSH ssh-keygen, tambahkan ke agen SSH dengan ssh-add, dan salin kunci publik ke clipboard dengan salah satunya pbcopy atau xclip. Langkah-langkah ini penting untuk memastikan bahwa kunci SSH telah diatur dengan benar dan tersedia untuk digunakan. Skrip kedua mengonfigurasi Nginx untuk membalikkan permintaan proxy ke server Gitea, memastikan bahwa SSL ditangani dengan benar dan permintaan diteruskan dengan benar proxy_pass.

Skrip Python pada contoh ketiga menggunakan perpustakaan Paramiko untuk menguji konektivitas SSH. Skrip ini memuat kunci pribadi menggunakan paramiko.RSAKey.from_private_key_file dan mencoba terhubung ke server Gitea. Jika koneksi gagal, pesan kesalahan akan ditampilkan, yang membantu mendiagnosis masalah. Skrip keempat melibatkan pembaruan file konfigurasi SSH untuk memastikan bahwa pengaturan yang benar sudah ada. Perintah seperti Host, HostName, User, Dan IdentityFile digunakan untuk menentukan detail koneksi untuk server Gitea. Akhirnya, chmod 600 ~/.ssh/config menetapkan izin yang sesuai pada file konfigurasi untuk mengamankannya.

Menyiapkan Otentikasi Kunci SSH untuk Gitea

Menggunakan Skrip Bash untuk Konfigurasi Frontend

# 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

Mengonfigurasi Proxy Terbalik Nginx untuk Gitea

Menggunakan File Konfigurasi 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;
    }
}

Mendiagnosis Masalah Koneksi SSH

Menggunakan Skrip Python untuk Menguji Konektivitas 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')

Memperbarui Konfigurasi SSH untuk Gitea

Menggunakan File Konfigurasi 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

Manajemen Kunci SSH Tingkat Lanjut untuk Gitea

Aspek penting lainnya dalam mengelola kunci SSH untuk server Gitea adalah penanganan dan rotasi kunci yang tepat. Merotasi kunci SSH Anda secara teratur dapat meningkatkan keamanan dengan mengurangi risiko penggunaan kunci yang disusupi tanpa batas waktu. Anda dapat membuat pasangan kunci baru menggunakan ssh-keygen dan perbarui pengaturan Gitea Anda untuk mencerminkan kunci baru. Praktik ini sangat penting untuk menjaga keamanan akses ke server Anda dari waktu ke waktu. Selain itu, memastikan bahwa kunci SSH Anda disimpan dengan aman dan tidak diekspos ke pengguna yang tidak berwenang sangatlah penting. Gunakan alat seperti ssh-agent untuk mengelola kunci dengan aman di memori dan menghindari meninggalkan kunci pribadi pada disk dalam keadaan tidak terlindungi.

Menerapkan izin ketat pada kunci SSH dan file konfigurasi Anda adalah lapisan keamanan lainnya. Perintah seperti chmod 600 ~/.ssh/id_rsa Dan chmod 600 ~/.ssh/config membatasi akses ke file-file ini, sehingga lebih sulit bagi pengguna yang tidak berwenang untuk mendapatkan akses. Selain itu, Anda dapat menggunakan autentikasi multifaktor (MFA) untuk menambahkan lapisan keamanan ekstra pada penggunaan kunci SSH Anda. Alat seperti Google Authenticator atau token perangkat keras dapat diintegrasikan dengan penyiapan SSH Anda sehingga memerlukan bentuk verifikasi kedua, sehingga membuat akses tidak sah menjadi lebih sulit.

Pertanyaan Umum dan Solusi untuk Masalah Akses SSH

  1. Mengapa saya mendapat pesan kesalahan "Izin ditolak"?
  2. Pastikan kunci SSH Anda ditambahkan dengan benar ke agen SSH dan kunci publik ditambahkan ke kunci resmi server Gitea Anda.
  3. Bagaimana cara menghasilkan pasangan kunci SSH baru?
  4. Gunakan perintah ssh-keygen -t rsa -b 4096 -C "your_email@example.com" untuk menghasilkan pasangan kunci SSH baru.
  5. Bagaimana cara menambahkan kunci SSH saya ke ssh-agent?
  6. Gunakan perintah eval "$(ssh-agent -s)" untuk memulai agen dan ssh-add ~/.ssh/id_rsa untuk menambahkan kunci Anda.
  7. Bagaimana cara menyalin kunci publik SSH saya ke clipboard?
  8. Menggunakan pbcopy < ~/.ssh/id_rsa.pub di macOS atau xclip -sel clip < ~/.ssh/id_rsa.pub di Linux.
  9. Apa yang harus saya lakukan jika kunci SSH saya disusupi?
  10. Buat pasangan kunci SSH baru dan perbarui kunci di server Gitea Anda dan semua layanan lain tempat kunci tersebut digunakan.
  11. Bagaimana cara mengatur izin yang benar pada file kunci SSH saya?
  12. Gunakan perintah chmod 600 ~/.ssh/id_rsa untuk mengatur izin yang tepat pada file kunci pribadi Anda.
  13. Mengapa waktu koneksi SSH saya habis?
  14. Periksa koneksi jaringan Anda, pastikan server Gitea berjalan, dan port SSH terbuka dan dapat diakses.
  15. Bagaimana cara menguji koneksi SSH saya ke server?
  16. Gunakan perintah ssh -T your_username@your_domain untuk menguji koneksi.

Langkah Terakhir untuk Mengamankan Koneksi SSH

Kesimpulannya, membuat koneksi SSH yang andal ke server Gitea memerlukan konfigurasi kunci SSH yang cermat, pengaturan proxy Nginx, dan praktik keamanan yang ketat. Dengan mengikuti langkah-langkah yang diuraikan, termasuk membuat dan mengelola kunci SSH, mengatur izin yang sesuai, dan mengonfigurasi Nginx dengan benar, pengguna dapat memastikan pengaturan yang aman dan fungsional. Menguji koneksi dengan alat seperti Paramiko dan memutar kunci secara teratur semakin meningkatkan keamanan dan keandalan. Mengatasi elemen-elemen ini secara komprehensif membantu menyelesaikan masalah koneksi dan menjaga lingkungan pengembangan yang aman.