$lang['tuto'] = "hướng dẫn"; ?>$lang['tuto'] = "hướng dẫn"; ?> Sự cố truy cập SSH với máy chủ Gitea tự lưu

Sự cố truy cập SSH với máy chủ Gitea tự lưu trữ

Temp mail SuperHeros
Sự cố truy cập SSH với máy chủ Gitea tự lưu trữ
Sự cố truy cập SSH với máy chủ Gitea tự lưu trữ

Giải quyết vấn đề truy cập SSH với Gitea

Gần đây, tôi đã thiết lập máy chủ Gitea bằng cách sử dụng bộ chứa Docker trên máy cục bộ của mình. Để bảo mật kết nối, tôi cũng đã định cấu hình proxy ngược Nginx với SSL do Certbot cung cấp.

Mặc dù đã làm theo hướng dẫn tạo khóa SSH từ Gitea và GitHub, tôi đã gặp phải lỗi từ chối cấp phép khi cố gắng kết nối với máy chủ Gitea. Bài viết này tìm hiểu các bước tôi đã thực hiện và các phương pháp khắc phục sự cố tôi đã sử dụng để giải quyết các vấn đề về quyền truy cập SSH.

Yêu cầu Sự miêu tả
ssh-keygen Tạo cặp khóa SSH mới cho các kết nối an toàn.
eval "$(ssh-agent -s)" Khởi động tác nhân SSH ở chế độ nền để quản lý các khóa SSH.
ssh-add ~/.ssh/id_rsa Thêm khóa riêng SSH được tạo vào tác nhân SSH.
pbcopy < ~/.ssh/id_rsa.pub Sao chép khóa chung SSH vào bảng nhớ tạm trên hệ thống macOS.
xclip -sel clip < ~/.ssh/id_rsa.pub Sao chép khóa chung SSH vào bảng nhớ tạm trên hệ thống Linux bằng xclip.
proxy_pass Chuyển yêu cầu đến máy chủ phụ trợ được chỉ định trong cấu hình Nginx.
paramiko.RSAKey.from_private_key_file Tải khóa riêng RSA từ một tệp bằng Paramiko trong Python.
paramiko.SSHClient().set_missing_host_key_policy Tự động thêm khóa máy chủ của máy chủ mà không cần nhắc người dùng.
chmod 600 ~/.ssh/config Đặt quyền chính xác cho tệp cấu hình SSH để bảo mật nó.

Khắc phục sự cố kết nối SSH

Các tập lệnh được cung cấp trong các ví dụ trước được thiết kế để giải quyết các khía cạnh khác nhau của việc thiết lập và khắc phục sự cố xác thực khóa SSH cho máy chủ Gitea. Tập lệnh đầu tiên sử dụng tập lệnh Bash để tạo khóa SSH với ssh-keygen, thêm nó vào tác nhân SSH với ssh-addvà sao chép khóa chung vào bảng nhớ tạm bằng một trong hai cách pbcopy hoặc xclip. Các bước này rất quan trọng để đảm bảo rằng khóa SSH được thiết lập chính xác và có sẵn để sử dụng. Tập lệnh thứ hai định cấu hình Nginx để đảo ngược các yêu cầu proxy đến máy chủ Gitea, đảm bảo rằng SSL được xử lý đúng cách và các yêu cầu được chuyển tiếp chính xác với proxy_pass.

Tập lệnh Python trong ví dụ thứ ba sử dụng thư viện Paramiko để kiểm tra kết nối SSH. Tập lệnh này tải khóa riêng bằng cách sử dụng paramiko.RSAKey.from_private_key_file và cố gắng kết nối với máy chủ Gitea. Nếu kết nối không thành công, nó sẽ cung cấp thông báo lỗi giúp chẩn đoán sự cố. Tập lệnh thứ tư liên quan đến việc cập nhật tệp cấu hình SSH để đảm bảo có các cài đặt chính xác. Các lệnh như Host, HostName, số 8, Và IdentityFile được sử dụng để chỉ định chi tiết kết nối cho máy chủ Gitea. Cuối cùng, chmod 600 ~/.ssh/config đặt các quyền thích hợp trên tệp cấu hình để bảo mật nó.

Thiết lập xác thực khóa SSH cho Gitea

Sử dụng Bash Script cho cấu hình giao diện người dùng

# 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

Định cấu hình Proxy ngược Nginx cho Gitea

Sử dụng tệp cấu hình 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;
    }
}

Chẩn đoán sự cố kết nối SSH

Sử dụng tập lệnh Python để kiểm tra kết nối 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')

Cập nhật cấu hình SSH cho Gitea

Sử dụng tệp cấu hình 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

Quản lý khóa SSH nâng cao cho Gitea

Một khía cạnh quan trọng khác của việc quản lý khóa SSH cho máy chủ Gitea là việc xử lý và xoay khóa thích hợp. Việc thường xuyên luân chuyển các khóa SSH của bạn có thể tăng cường bảo mật bằng cách giảm nguy cơ khóa bị xâm phạm được sử dụng vô thời hạn. Bạn có thể tạo một cặp khóa mới bằng cách sử dụng ssh-keygen và cập nhật cài đặt Gitea của bạn để phản ánh khóa mới. Thực hành này rất quan trọng để duy trì quyền truy cập an toàn vào máy chủ của bạn theo thời gian. Ngoài ra, việc đảm bảo rằng các khóa SSH của bạn được lưu trữ an toàn và không bị người dùng trái phép tiếp xúc là điều quan trọng. Sử dụng các công cụ như ssh-agent để quản lý các khóa một cách an toàn trong bộ nhớ và tránh để các khóa riêng trên đĩa ở trạng thái không được bảo vệ.

Triển khai các quyền nghiêm ngặt trên các khóa SSH và tệp cấu hình của bạn là một lớp bảo mật khác. Các lệnh như chmod 600 ~/.ssh/id_rsachmod 600 ~/.ssh/config hạn chế quyền truy cập vào các tệp này, khiến người dùng trái phép khó truy cập hơn. Hơn nữa, bạn có thể sử dụng xác thực đa yếu tố (MFA) để thêm lớp bảo mật bổ sung cho việc sử dụng khóa SSH của mình. Các công cụ như Google Authenticator hoặc mã thông báo phần cứng có thể được tích hợp với thiết lập SSH của bạn để yêu cầu hình thức xác minh thứ hai, khiến việc truy cập trái phép trở nên khó khăn hơn.

Các câu hỏi và giải pháp phổ biến cho các vấn đề truy cập SSH

  1. Tại sao tôi nhận được lỗi "Quyền bị từ chối"?
  2. Đảm bảo rằng các khóa SSH của bạn được thêm chính xác vào tác nhân SSH và khóa chung được thêm vào các khóa được ủy quyền của máy chủ Gitea của bạn.
  3. Làm cách nào để tạo cặp khóa SSH mới?
  4. Sử dụng lệnh ssh-keygen -t rsa -b 4096 -C "your_email@example.com" để tạo cặp khóa SSH mới.
  5. Làm cách nào để thêm khóa SSH của tôi vào tác nhân ssh?
  6. Sử dụng lệnh eval "$(ssh-agent -s)" để bắt đầu đại lý và ssh-add ~/.ssh/id_rsa để thêm chìa khóa của bạn.
  7. Làm cách nào tôi có thể sao chép khóa công khai SSH của mình vào bảng nhớ tạm?
  8. Sử dụng pbcopy < ~/.ssh/id_rsa.pub trên macOS hoặc xclip -sel clip < ~/.ssh/id_rsa.pub trên Linux.
  9. Tôi nên làm gì nếu khóa SSH của tôi bị xâm phạm?
  10. Tạo cặp khóa SSH mới và cập nhật các khóa trong máy chủ Gitea của bạn cũng như tất cả các dịch vụ khác sử dụng khóa đó.
  11. Làm cách nào tôi có thể đặt quyền chính xác cho các tệp khóa SSH của mình?
  12. Sử dụng lệnh chmod 600 ~/.ssh/id_rsa để đặt quyền thích hợp trên tệp khóa riêng của bạn.
  13. Tại sao kết nối SSH của tôi hết thời gian chờ?
  14. Kiểm tra kết nối mạng của bạn, đảm bảo máy chủ Gitea đang chạy và cổng SSH đang mở và có thể truy cập được.
  15. Làm cách nào để kiểm tra kết nối SSH của tôi với máy chủ?
  16. Sử dụng lệnh ssh -T your_username@your_domain để kiểm tra kết nối.

Các bước cuối cùng để bảo mật kết nối SSH

Tóm lại, việc thiết lập kết nối SSH đáng tin cậy đến máy chủ Gitea yêu cầu phải cấu hình cẩn thận các khóa SSH, cài đặt proxy Nginx và các biện pháp bảo mật nghiêm ngặt. Bằng cách làm theo các bước được nêu, bao gồm tạo và quản lý khóa SSH, đặt quyền phù hợp và định cấu hình Nginx chính xác, người dùng có thể đảm bảo thiết lập an toàn và đầy đủ chức năng. Kiểm tra kết nối bằng các công cụ như Paramiko và thường xuyên xoay phím sẽ nâng cao hơn nữa tính bảo mật và độ tin cậy. Việc giải quyết các yếu tố này một cách toàn diện sẽ giúp giải quyết các vấn đề kết nối và duy trì môi trường phát triển an toàn.