Cách thiết lập SSH Key trên Server Ubuntu 16.04

6 năm trước

Cách thiết lập SSH Key trên Server Ubuntu 16.04

 

SSH, hay secure shell, là một giao thức được mã hóa dùng để quản trị và kết nối đến server từ xa. Khi làm việc với Ubuntu server, bạn sẽ dành phần lớn thời gian trên terminal nên việc kết nối tới server qua SSH là rất cần thiết.

Bài viết này sẽ hướng dẫn bạn cách tạo một cặp SSH keys cho một bản cài đặt Ubuntu 16.04. SSH key cung cấp một cách bảo mật, nhanh chóng để đăng nhập vào server, và đưuọc khuyến khích với tất cả user của server.

Bước 1 — Tạo RSA Key Pair

Bước đầu tiên là tạo một key pair trên client machine (thường là máy tính của bạn):

ssh-keygen

 

ssh-keygen sẽ tạo một RSA key pair dài 2048 bit, và nó đủ bảo mật cho hầu hết trường hợp (thêm cờ -b 4096 để tạo một cặp key dài 4096 bit nếu muốn).

Output ra sẽ như sau:

OutputEnter file in which to save the key (/your_home/.ssh/id_rsa):
 
 

Bấm Enter để lưu key ở địa chỉ .ssh/ trong thư mục gốc.

Sau đó bạn sẽ thấy:

OutputEnter passphrase (empty for no passphrase):
 

Bạn có thể nhập vào mật khẩu hoặc không. Tuy nhiên bạn nên nhập vì nó sẽ tăng thêm một tầng bảo mật cho hệ thống.

Tiếp theo output sẽ như sau:

OutputYour identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
 

Giờ bạn đã có một cặp public và private key dùng để xác thực truy cập.

 

Bước 2 — Copy Public Key tới Ubuntu Server

 

Dùng tiện ích ssh-copy-id

ssh-copy-id thường có sẵn trong nhiều hệ điều hành, và có thể trên cả hệ thống của bạn. Nó là cách dễ dàng nhất để upload public key của bạn lên server. Để dùng cách này bạn phải có khả năng truy cập SSH đến server bằng mật khẩu của user.

Nhập lệnh:

ssh-copy-id username@remote_host

 

Output:

OutputThe authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
 

Thông báo cho biết máy tính không nhận diện được host, vì đây là lần truy cập đầu tiên. Gõ "yes" rồi bấm ENTER để tiếp tục.

Bạn sẽ nhận được một yêu cầu cho mật khẩu của user:

Output/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 keysusername@111.111.11.111's password:
 

Nhập vào mật khẩu rồi bấm ENTER ( lưu ý rằng mật khẩu của bạn sẽ không hiển thị trên màn hình ).Công cụ ta đang dùng sẽ tự động kết nối đến account trên server, upload các thành phần trong ~/.ssh/id_rsa.pub lên file authorized_keys trong thư mục ~/.ssh của tài khoản.

OutputNumber of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@111.111.11.111'"
and check to make sure that only the key(s) you wanted were added.
 

Copy Public Key qua SSH

Nếu không có ssh-copy-id và có thể truy cập SSH đến server thông qua mật khẩu, bạn có thể upload các key qua các lệnh SSH thông thường.

Dùng lệnh cat để đọc các thành phần của public SSH key trên máy tính và truyền nó thông qua một kết nối SSH đến server. Sau đó đảm bảo rằng thư mục ~/.ssh tồn tại trong thư mục gốc của tài khoản đang sử dụng và lưu chúng vào file authorized_keys trong thư mục đó.

Lệnh đầy đủ sẽ là:

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

Sau đó bạn sẽ thấy thông báo sau:

OutputThe authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
 

Gõ "yes " rồi bấm ENTER .

Sau đó nhập vào mật khẩu cho user:

Outputusername@111.111.11.111's password:

Copying Public Key một cách thủ công

 

Nếu không thể SSH đến server qua mật khẩu, bạn sẽ cần copy public key thủ công.

Để hiển thị id_rsa.pub nhập lệnh sau:

cat ~/.ssh/id_rsa.pub

 

Bạn sẽ thấy output gồm một dãy kí tự rất dài như sau:

Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
 

Truy cập vào remote host của bạn bằng bất cứ cách nào bạn muốn.

Lệnh sau sẽ tạo thư mục ~/.ssh , hoặc không là gì nếu nó đã tồn tại:

mkdir -p ~/.ssh 

 

Giờ hãy tạo ( hoặc edit) file authorized_keys trong đường dẫn này với lệnh:

echo public_key_string >> ~/.ssh/authorized_keys

 

Với public_key_string là chuỗi kí tự trong output của lệnh  cat ~/.ssh/id_rsa.pub bên trên, bắt đầu từ ssh-rsa AAAA....

 

Bước 3 — Xác thực với Ubuntu Server qua SSH Key

 

Sau khi hoàn tất 2 bước trên, bạn sẽ có thể đăng nhập vào remote host mà không cần mật khẩu của remote account.

Quá trình này gần giống với các bước ở trên. Đầu tiên nhập lệnh:

ssh username@remote_host

 

Bạn sẽ thấy ouput như sau ( nếu đây là lần đầu tiên kết nối )

OutputThe authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
 

Gõ "yes" rồi bấm ENTER .

Nếu không nhập vào mật khẩu (ở bước 1),bạn sẽ truy cập vào mà không cần mật khẩu, còn nếu có thì hãy nhập vào mật khẩu của mình.

Bước 4 — Vô hiệu hóa Xác thực qua Mật khẩu

 

Nếu bạn copy public key thông qua SSH, sau khi đăng nhập thành công, bạn nên vô hiệu hóa nó để đảm bảo bảo mật, vì khi đó mọi truy cập vào hệ thống đều phải thông qua SSH key.

Trước hết, hãy đảm bảo rằng bạn đã có thể SSH qua SSH key vào root user, hoặc non-root user với quyền sudo . Điều này cần thiết để bạn không tự khóa mình khỏi hệ thống.

Đăng nhập vào root user hoặc sudo user. Sau đó mở file cấu hình của SSH Daemon:

sudo nano /etc/ssh/sshd_config

 

Tìm đến dòng PasswordAuthentication rồi đặt giá trị "no" cho nó để chặn các truy cập thông qua mật khẩu.

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Bấm CTRL + X, rồi Y để lưu và đóng file và ENTER để thoát khỏi nano

Sau đó khởi động lại sshd :

sudo systemctl restart ssh

Mở terminal mới rồi truy cập vào server để kiểm tra lại:

vssh username@remote_host