SSH without password – kết nối SSH không cần mật khẩu

Nếu bạn chưa biết thì thường lập trình viên luôn luôn dùng SSH without password để kết nối vào server từ xa. SSH hay còn gọi là Secure Shell, là một giao thức mạng mã nguồn mở dùng để đăng nhập vào server và thực thi lệnh từ xa. Nó thường được dùng để quản lý dịch vụ cho thuê VPS hosting.

Có 2 cách để kích hoạt SSH:

  • Chứng thực bằng password
  • Chứng thực bằng public key

Public key based authentication chính là cách sử dụng SSH without password (SSH không mật khẩu).

Vì sao sử dụng SSH without password?

Việc sử dụng mật khẩu có bất tiện là khó nhớ và không thoải mái, vì đôi khi phải nhập mật khẩu nhiều lần nếu môi trường Linux đòi hỏi.

Các ưu điểm của SSH without password là:

  • Dễ dàng đăng nhập và không cần tương tác. Người dùng không phải gõ mật khẩu cho mỗi session kết nối
  • An toàn hơn nhiều so với mật khẩu thông thường do tính chất mã hóa của public-private key
  • Đáng tin cậy hơn
  • Quản lý truy cập và chứng thực tốt hơn
  • Giải pháp tốt cho cả hệ thống lớn và nhỏ
  • Dễ xây dựng và vận hành

Để bắt đầu dùng SSH without password, bạn cần tạo public key. Trong bài này, chúng tôi sẽ dùng SSH version 2, là bản mới nhất và an toàn hơn.

Đăng nhập VPS bằng SSH trước nhé!

Đầu tiên, bạn cần kiểm tra xem SSH key cho máy có sẵn chưa. Việc này sẽ tránh ghi đè cấu hình mới lên. Kiểm tra bằng lệnh sau:

ls -al ~/.ssh/id_*.pub

Nếu bạn đã thấy một key tồn tại, bạn có thể bỏ qua bước tạo SSH key, ghi đè key mới lên và tạo backup của key cũ. Nếu chưa có, bạn sẽ thấy kết quả output như sau:

ls: cannot access /users/appsadm/.ssh/id_*.pub: No such file or directory

Tiếp theo, chúng tôi sẽ tiến hành tạo SSH key.

Tạo SSH key trong Ubuntu và CentOS:

Để tạo cặp khóa public và private key trên Ubuntu hoặc CentOS, bạn dùng lệnh sau:

ssh-keygen -t rsa

Option -t có nghĩa là type (loại), còn RSA là giao thức được dùng để tạo khóa.

Khóa mặc định là 2048 bits. , Nếu bạn muốn bảo mật mạnh hơn, hãy đổi giá trị thành 4096 bits. Trong trường hợp đó sẽ là:

ssh-keygen -t rsa -b 4096

Đây là lệnh tương tác và bạn sẽ được hỏi những câu hỏi như sau:

  • Nhập tên file để lưu (/home/.ssh.id_rsa)
  • Nhập mật khẩu (bỏ trống nếu không đặt mật khẩu)

Bạn có thể nhấn enter cho cả 2 câu hỏi để dùng giá trị mặc định. Paraphrase sẽ dùng để mã hóa private key; nó không bắt buộc nên bạn có thể bỏ trống. Private key sẽ được lưu trong thư mục mặc định – .ssh/id_rsa.

Public key sẽ được lưu trong file .ssh/id_rsa.pub. Vậy là đã xong việc tạo khóa, bạn có thể kiểm tra lại bằng cách xem lại file.

Copy Public Key để kích hoạt SSH without password

Bạn có thể copy ssh public key tới máy đích bằng 3 cách:

  • Sử dụng ssh-copy-id command
  • Copy bằng SSH
  • Copy thủ công

Lựa chọn đầu tiên là nhanh nhất và được khuyên dùng. Với lệnh ssh-copy-id có sẵn trong hầu như mọi bản Linux. Nếu như vì lý do nào đó bạn không thấy lệnh này thì hãy dùng 1 trong 2 cách còn lại để copy ssh key.

Cách 1: Sử dụng ssh-copy-id Command để copy ssh key

Cú pháp chính của lệnh ssh-copy-id để copy ssh key là:

ssh-copy-id remote_username@remote_IP_Address

Sau đó bạn sẽ nhập mật khẩu máy remote. Sau khi chứng thực đúng, SSH public key sẽ được thêm vào file authorized_keys của máy đó. Kết nối sẽ tự động bị tắt sau khi thêm

Cách 2: Copy Private Key bằng SSH

Cách còn lại là dùng SSH để copy private key. Lệnh dưới sẽ thực hiện việc này nhưng bạn cần nhập username và Ip của máy remote.

cat ~/.ssh/id_rsa.pub | ssh remote_username@remote_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Nó sẽ thêm một entry vào trong file authorized_keys của máy remote.

Cách 3: Copy thủ công SSH Public Key

Cách thứ 3 hơi khác chút vì bạn phải copy thủ công. Bạn cần thêm nội dung của file id_rsa.pub vào trong ~/.ssh/authorized_keys.

Bạn có thể lấy nội dung của file id_rsa.pub bằng lệnh vi hay cat:

cat ~/.ssh/id_rsa.pub

Sau đó bạn copy nội dung hiện ra bắt đầu từ chỗ ssh-rsa. Kế đến bạn đăng nhập vào trong máy remote và tạo file .ssh nếu nó không có sẵn.

mkdir -p ~/.ssh

Bạn cũng có thể tạo file authorized_keys tương tự. Thêm public key vào trong file trống bằng cách sau:

echo SSH_public_key >> ~/.ssh/authorized_keys

SSH_public_key sẽ là public key được copy từ máy nguồn của bạn. Nó bắt đầu với chữ ssh-rsa.

Sau khi key được copy, bạn cần cung cấp quyền vào remote server cho thư mục .ssh bằng lệnh SSH.

chmod -766 ~/.ssh

Tiến hành sử dụng SSH không cần mật khẩu (SSH without password)

Giờ bạn có thể dùng SSH không cần mật khẩu, để kiểm thử hãy kết nối vào máy chủ từ xa:

ssh remote_username@remote_IP_Address

Nếu thành công, bạn sẽ đăng nhập tự động được mà không phải điền mật khẩu.

Làm thế nào để vô hiệu SSH không mật khẩu

Nếu bạn không cần dùng SSH không mật khẩu nữa, bạn có thể vô hiệu nó bằng các bước:

Mở file SSH configuration file – /etc/ssh/ssh_config, bằng một trình biên tập như nano. Tìm dòng PasswordAuthentication, và chỉnh lại như sau:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

Sau đó, khởi động lại SSH. Lệnh khởi động lại trên Ubuntu 18.04 là:

sudo systemctl restart ssh

Còn lệnh khởi động lại trên CentOS 7

sudo systemctl restart sshd

Lời kết

Giờ bạn đã biết cách thiết lập đăng nhập vào server bằng SSH without password (không cần dùng mật khẩu). Phương pháp này an toàn hơn rất nhiều so với dùng mật khẩu thông thường và cũng tiện lợi hơn để quản lý VPS. Bạn cũng biết cách vô hiệu nó khi không cần dùng nữa. Chúng tôi hy vọng bài viết này hữu ích cho bạn, và hãy luôn giữ an toàn khi thao tác trên mạng!

Author
Tác giả

Hai G.

Hải G. là chuyên gia quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress và đã dùng nó hơn 5 năm nay. Sở thích của anh là đọc, viết blog, đi du lịch và tư vấn cho các bạn trẻ khởi nghiệp.