Cấu hình login SSH bằng key trên Linux Image Cấu hình login SSH bằng key trên Linux

Bài viết này giới thiệu các bạn về cách cấu hình login SSH bằng key trên hệ điều hành Linux.

SSH Keys là phương pháp xác thực đăng nhập với máy chủ qua SSH bằng việc đối chiếu giữa một cặp keys, bao gồm một khóa riêng tư(private key) và khóa công khai(public key). Có thể hiểu, Private Key là chìa khóa còn Public Key là ổ khóa.

Trong đó:

  • Private Key là một file text chứa dữ liệu được mã hóa, sử dụng thay cho password, thường được lưu trữ cẩn thận trên máy tính bạn. Thông thường, private key có độ dài ít nhất 2048bit và có thể được mã hóa bằng cụm mật khẩu nhằm tránh trường hợp bị sử dụng ngoài ý muốn. Định dạng file tùy thuộc phần mềm tạo keys, có thể OpenSSH Key, PuTTy Private Key Files .ppk hoặc Bitvise Keypair Files .bkp ...
  • Public Key là một file text chứa dữ liệu được mã hóa, có thể được cài đặt ở bất kỳ một server nào. Khi bạn gửi yêu cầu đăng nhập kèm private key, server sẽ kiểm tra sự trùng khớp với public key trên server nhằm xác thực yêu cầu truy cập. Định dạng file .pub

1. Tạo key SSH ở client(máy trạm)

1.1 Đối với Linux

Tạo cặp Keys có độ dài 4096bit với lệnh ssh-keygen -t rsa -b 4096. Trong lúc cài đặt, chương trình sẽ hỏi bạn nơi lưu keys và mật khẩu sử dụng private key.

root@ngocdang:~# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #Nơi lưu key
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #Mật khẫu cho private key
Enter same passphrase again: #Xác nhận lại mật khẫu cho private key
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:NzjO2+pjrp2h5O6pGYGlNNZqDVUm0Ub1qEtxAYlhHqU root@ngocdang
The key's randomart image is:
+---[RSA 4096]----+
|    BO*+o        |
|   =.=+  +       |
|  = E.. o .      |
| o O   + .       |
|  = o o S o      |
| .   o + o .     |
|    . o +        |
|     = +o=       |
|    o+B=Bo.      |
+----[SHA256]-----+

Chúng ta có thể dùng passphrase để bảo mật thêm cho private key.

Keys được tạo theo thuật toán mã hóa RSA và lưu tại /root/.ssh/. Trong đó, Private Key là id_rsa còn Public Key là id_rsa.pub.

Chú ý: Chúng ta cần phải giữ lại Private Key vì key là quan trọng cần bảo mật.

1.2 Đối với Windows

1.1.1. Dùng Cygwin

Chúng ta sử dụng phần mềm Cygwin sau đó chạy lệnh sau:

C:\Users\Name>ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Name/.ssh/id_rsa): #Nơi lưu key
Created directory 'C:\Users\Name/.ssh'.
Enter passphrase (empty for no passphrase): #Mật khẫu cho private key
Enter same passphrase again: #Xác nhận lại mật khẫu cho private key
Your identification has been saved in C:\Users\Name/.ssh/id_rsa.
Your public key has been saved in C:\Users\Name/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mH2XtSnvd96cgaj8TYiWZ++O922CGcFfgsJ/+pEgbxU Name@DESKTOP-7RPRNB3
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|         . . .E  |
|       +  o +o.+.|
|      o S oo=o+o |
|         .o+==+. |
|         + =oO+. |
|        o +.Oo.oO|
|         o.o+*+B*|
+----[SHA256]-----+

1.1.2. Dùng PuTTyGen

Tạo SSH Keys bằng PuTTyGen: lựa chọn SSH-2 RSA và 2048 như hình bên dưới rồi ấn Generate

Tạo SSH Keys bằng PuTTyGen

Sau khi tạo xong, màn hình hiển thị Public Key. Bạn có thể thiết lập Passphrase và Key Comment. Bạn nhấn Save private key để lưu lại.

save private

1.1.3. Dùng ZOC Client

Tại giao diện chính của ZOC Client chúng ta chọn File rồi tiếp tục chọn Create SSH Keys Files...

ZOC Client

Tạo SSH Keys bằng ZOC Client như hình bên dưới:

Dùng ZOC Client

1.1.4. Dùng Bitvise SSH Client

Tại giao diện chính của Bitvise SSH Client chúng ta chọn Client key manager

Bitvise SSH Client

Tạo SSH Keys bằng Bitvise SSH Client như hình bên dưới:

Dùng Bitvise SSH Client

1.3 Đối với MacOS

Đối với hệ điều hành MacOS chúng ta tạo cặp Key có độ dài 4096bit sử dụng lệnh sau lệnh ssh-keygen -t rsa -b 4096

MacBook% ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/Name/.ssh/id_rsa): #Nơi lưu key
Enter passphrase (empty for no passphrase): #Mật khẫu cho private key 
Enter same passphrase again: #Xác nhận lại mật khẫu cho private key
Your identification has been saved in /Users/Name/.ssh/id_rsa.
Your public key has been saved in /Users/Name/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GMY6RmoQSoKW/4Vs+ZJG45tpdDA3sNdyRpiAo7zoLvQ Name@MacBook.local
The key's randomart image is:
+---[RSA 4096]----+
|+.. ... o        |
|=+ o o o .       |
|= o + O o        |
| + + & O +       |
|. + O @ S        |
|.+ . O o         |
|o . o *          |
|.. E =           |
|o.  .            |
+----[SHA256]-----+

Chúng ta có thể dùng passphrase để bảo mật thêm cho private key. Giúp cho việc kết nối ssh an toàn hơn

Keys được tạo theo thuật toán mã hóa RSA và lưu tại /Users/name/.ssh/. Trong đó, Private Key là id_rsa còn Public Key là id_rsa.pub.

Chú ý: Chúng ta cần phải giữ lại Private Key vì key là quan trọng cần bảo mật.

2. Cấu hình login SSH bằng key ở Server

Bật đăng nhập bằng SSH Keys: tại tệp cấu hình /etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Sau đó, khởi động lại SSH Service

systemctl restart sshd

2.1. Cấu hình Public Key SSH trên Server theo cách thủ công

Đối với server Linux, chúng ta phải lưu Public Key tại /.ssh/authorized_keys để sác thực đăng nhập sử dụng SSH Key. Chúng ta thực hiện như sau:

👉 Bước 1: Tạo thư mục ~/.ssh

mkdir ~/.ssh

Chúng ta thiết lập quyền chính xác và bảo mật cho thư mục ~/.ssh:

chmod 700 ~/.ssh

👉 Bước 2: Dùng trình soạn thảo văn bản vi, nano,... để thêm Public Key vào /.ssh/authorized_keys

vi ~/.ssh/authorized_keys 

Copy toàn bộ Public Key dán vào tệp ~/.ssh/authorized_keys và dùng tổ hợp phím Esc sau đó :wq để lưu lại.

2.2. Cấu hình Public Key SSH trên Server dùng lệnh ssh-copy-id

Để đưa Public Key (id_rsa.pub) lên server, chúng ta sử dụng tool của Linux là ssh-copy-id với cú pháp như sau:

ssh-copy-id -i [đường dẫn file] [username@remote-ip-address]

Trong đó:

  • Đường dẫn file là /.ssh/id_rsa.pub
  • remote-ip-address là địa chỉ IP của Server.

    MacBook% ssh-copy-id -i /Users/name/.ssh/id_rsa.pub root@192.168.22.160
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/name/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@192.168.22.160's password:
    
    Number of key(s) added:        1
    
    Now try logging into the machine, with:   "ssh 'root@192.168.22.160'"
    and check to make sure that only the key(s) you wanted were added.
    

Public key lưu trên server ở đường dẫn mặc định ~/.ssh/authorized_keys

3. Cấu hình chỉ cho login SSH bằng key vào server

Để đảm bảo an toàn, chúng ta nên nên thay đổi port truy cập SSH thay vì dùng port 22 mặc định.

Các bước thay đổi port đăng nhập SSH:

  • Sử dụng trình soạn thảo vi chỉnh sửa file sshd_config

    vi /etc/ssh/sshd_config
    
  • Tìm kiếm dòng #Port 22, bỏ dấu # ở đầu và thay bằng port bạn muốn dùng, ví dụ port 2019

    Lưu ý: port cần phải free và không có service nào sử dụng để tránh xung đột.

  • Mở port

    Mở port 2019

    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2019 -j ACCEPT
    

    Khởi động lại SSHD service

    systemctl restart sshd
    

    Lưu lại iptables

    systemctl save iptables
    

    Kiểm tra port iptables

    iptables -L -n
    

Bây giờ chúng ta login lại SSH sử dụng port mới.

Chúng ta nên vô hiệu hóa đăng nhập sử dụng mật khẩu bằng cách chỉnh sửa tham số sau trong tệp cấu hình /etc/ssh/sshd_config.

PasswordAuthentication no

Sau đó, khởi động lại SSH Service

systemctl restart sshd

4. Cách kết nối SSH ở client dùng key

4.1. Đối với Windows

4.1.1. Dùng PuTTY

Sau khi cài đặt thành công PuTTY chúng ta thực hiện các bước sau để kết nối SSH. Như hình bên dưới:

Dùng PuTTY kết nối SSH ở client

Chúng ta thực hiện các bước như sau:

  • Bước 1: Điền địa chỉ ip của VPS vào ô Host Name(or IP address)
  • Bước 2: Điền vào ô port số port của VPS
  • Bước 3: Chọn SSH
  • Bước 4: Tại ô Saved Sessions điền tên theo ý muốn của các bạn. Sau đó chọn save
  • Bước 5: Chọn Open và thực hiện điều khiển VPS

4.1.2. Dùng ZOC Client

Sau khi cài đặt thành công ZOZ CLient chúng ta mở chương trình lên. Mặc định box QuickConnection sẽ hiện ra. Nhập các thông tin cần thiết như hướng dẫn bên dưới:

Dùng ZOC Client kết nối SSH ở client

Thực hiện các bước như sau:

  • Bước 1: Connect To : Nhập địa chỉ ip của VPS
  • Bước 2: Port : Mặc định là 22, nếu dùng vps có số port khác thì chúng ta điền số port của vps như ví dụ trên là port 2019
  • Bước 3: Session Profile : Chọn standard.zoc
  • Bước 4: Connection Type: Chọn Secure Shell
  • Bước 5: Emulation : Chọn Linux
  • Bước 6: Username : Chọn root(quản trị cao nhất trong Linux)
  • Bước 7: Password : Nhập password khi bạn tạo key SSH

4.1.3. Dùng Bitvise SSH Client

Sau khi cài đặt thành công ZOZ CLient chúng ta mở chương trình lên. Để đăng nhập chúng ta cần có đầy đủ thông tin để truy cập SSH của server. Nhập các thông tin cần thiết như hướng dẫn bên dưới:

Dùng Bitvise SSH Client kết nối SSH ở client

Thực hiện các bước như sau:

  • Bước 1: Nhập IP tại Host
  • Bước 2: Nhập Port
  • Bước 3: Nhập username
  • Bước 4: Chọn kiểu bảo mật là password
  • Bước 5: Nhập password
  • Bước 6: Click "Login"

4.2. Đối với MacOS, Linux

4.2.1. File private key nằm ở đường dẫn default

Chúng ta chạy lệnh sau để điều khiển VPS cú pháp như sau:

ssh username@HOST -p number

Ví dụ: Kết nối ssh với VPS có IP 192.168.1.2 và port 2019 chúng ta thực hiện như sau:

MacBook% ssh root@192.168.1.2 -p 2019
Enter passphrase for key '/Users/Name/.ssh/id_rsa':

4.2.2. File private key không nằm ở đường dẫn default

Nếu file file private key không nằm ở đường dẫn default thì chúng ta sử dụng tùy chọn -i theo sau là đường dẫn của file private key cú pháp như sau:

ssh -i [file private key] username@HOST -p number

Ví dụ: Kết nối VPS khi file private key nằm trong đường dẫn /Users/Name/test không phải là đường dẫn default chúng ta thực hiện như bên dưới

MacBook% ssh -i /Users/Name/test root@172.150.227.128 -p 2019
Enter passphrase for key '/Users/Name/test':