Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Cách SSH đến server từ xa không cần nhập mật khẩu (SSH Key Authentication)

Hướng dẫn thiết lập SSH Key-based Authentication – đăng nhập SSH không mật khẩu, an toàn hơn mật khẩu, cho phép tự động hóa (script, cron, CI/CD, Ansible).

Tại sao dùng SSH Key?

  • An toàn hơn: Khóa riêng (private key) không bao giờ truyền qua mạng.
  • Tự động hóa: Script backup, deploy, sync không cần nhập passphrase.
  • Kháng brute-force: Vô hiệu hóa password auth → bot không tấn công được.

Bước 1: Tạo cặp khóa (Local machine)

# ssh-keygen -t ed25519 -C "user@hostname-$(date +%F)"
# Hoặc RSA 4096-bit (tương thích rộng):
# ssh-keygen -t rsa -b 4096 -C "user@hostname-$(date +%F)"
  • -t ed25519: Thuật toán hiện đại, khóa nhỏ, nhanh, an toàn (khuyến khích).
  • -C: Comment nhận diện khóa.
  • Enter để chấp nhận đường dẫn mặc định ~/.ssh/id_ed25519.
  • Passphrase: Nên đặt (bảo vệ khóa riêng nếu máy bị mất). Dùng ssh-agent để không nhập lại.

Bước 2: Copy khóa công khai lên Server

Cách 1: ssh-copy-id (Dễ nhất)

# ssh-copy-id user@remoteserver.com

Cách 2: Thủ công (nếu không có ssh-copy-id)

# cat ~/.ssh/id_ed25519.pub | ssh user@remoteserver.com "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Bước 3: Cấp quyền đúng trên Server (Quan trọng!)

# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/id_ed25519     # Private key
# chmod 644 ~/.ssh/id_ed25519.pub # Public key

Sai quyền → SSH từ chối key.

Bước 4: Test đăng nhập

# ssh user@remoteserver.com
# Nếu có passphrase: nhập 1 lần, ssh-agent ghi nhớ trong session.

Vô hiệu hóa đăng nhập mật khẩu (Hardening) – Trên SERVER

Sửa /etc/ssh/sshd_config:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Khởi động lại: systemctl restart sshd.

⚠️ Test key login THÀNH CÔNG trước khi tắt password!

Quản lý Passphrase với ssh-agent

# eval "$(ssh-agent -s)"
# ssh-add ~/.ssh/id_ed25519
# Nhập passphrase 1 lần → cache trong session.

Thêm vào ~/.bashrc để auto-start agent.

Chạy lệnh từ xa không tương tác

# ssh user@server "uptime; df -h"
# scp file.txt user@server:/path/
# rsync -avz /local/path/ user@server:/remote/path/

Cấu hình tiện lợi (~/.ssh/config)

Host myserver
    HostName 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ForwardAgent yes   # Cho phép dùng key local trên server (jump host)

Sau đó chỉ cần: ssh myserver.

Xoay vòng khóa (Key Rotation)

  • Tạo khóa mới định kỳ (6-12 tháng).
  • Thêm public key mới vào authorized_keys server.
  • Xóa key cũ khỏi authorized_keys.
  • Cập nhật ~/.ssh/config nếu đổi tên file.