Cách thiết lập SSH Key trên Server Ubuntu 16.04
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.
...
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