Cách Cài Đặt SSH Keys trên CentOS 7

2 năm trước

Cách Cài Đặt SSH Keys trên CentOS 7

 

Giới thiệu 

SSH, trình bảo mật, là một giao thức mật mã được sử dụng để quản trị và liên lạc với máy chủ. Khi làm việc với máy chủ CentOS, rất có thể bạn sẽ dành phần lớn thời gian của mình trong một phiên kết nối với máy chủ của bạn thông qua SSH.

Trong hướng dẫn này, chúng ta sẽ tập trung vào việc thiết lập SSH keys cho cài đặt CentOS 7 vanilla. SSH keys cung cấp cách thức đăng nhập vào máy chủ của bạn một cách an toàn và được khuyến khích cho tất cả người dùng.

 

Bước 1 - Tạo cặp khóa RSA

 

Bước đầu tiên là tạo một cặp khóa trên máy khách (thường là máy tính của bạn):

 ssh-keygen

    Theo mặc định, ssh-keygen sẽ tạo một cặp khóa RSA 2048-bit, đủ an toàn cho hầu hết các trường hợp sử dụng (bạn có thể tùy ý vượt qua cờ -b 4096 để tạo ra một khóa 4096 lớn hơn).

    Sau khi nhập lệnh, bạn sẽ thấy dấu nhắc sau:

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

    Nhấn ENTERđể lưu cặp khóa vào thư mục con .ssh/ trong thư mục chính của bạn, hoặc chỉ định một đường dẫn thay thế.

    Sau đó, bạn sẽ thấy dấu nhắc sau:

    Output
    Enter passphrase (empty for no passphrase):

    Tại đây bạn tùy ý có thể nhập cụm từ mật khẩu bảo mật, được đánh giá cao. Cụm từ mật khẩu thêm một lớp bảo mật bổ sung để ngăn người dùng trái phép đăng nhập.  

    Bạn  sẽ thấy kết quả sau:

    Output
    Your 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=++. |
    +-----------------+
     

    Bây giờ bạn có một khóa công khai và riêng tư mà bạn có thể sử dụng để xác thực. Bước tiếp theo là đặt khóa công khai trên máy chủ của bạn để bạn có thể sử dụng chứng thực dựa trên SSH Key để đăng nhập.

     

    Bước 2 - Sao chép Public Key tới máy chủ CentOS

    Cách nhanh nhất để sao chép khóa công khai của bạn đến máy chủ CentOS là sử dụng một tiện ích được gọi là ssh-copy-id.Do tính đơn giản của nó nên phương pháp này được đánh giá cao nếu có. Nếu bạn không có ssh-copy-id có sẵn trên máy khách, bạn có thể sử dụng một trong hai phương pháp thay thế được cung cấp trong phần này (sao chép qua SSH dựa trên mật khẩu hoặc tự sao chép khóa).

    Sao chép Public Key của bạn sử dụng ssh-copy-id

    Công cụ  ssh-copy-id được bao gồm theo mặc định trong nhiều hệ điều hành, vì vậy bạn có thể có nó trên hệ thống cục bộ . Để phương pháp này hoạt động, bạn phải có quyền truy cập SSH dựa trên mật khẩu vào máy chủ của mình.

    Để sử dụng tiện ích này, bạn chỉ cần chỉ định máy chủ từ xa mà bạn muốn kết nối và tài khoản người dùng mà bạn có mật khẩu truy cập vào SSH. Đây là tài khoản mà SSH Key công khai của bạn sẽ được sao chép.

    Cú pháp là:

     ssh-copy-id username@remote_host

      Bạn có thể thấy thông báo sau:

      Output
      The 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
       

      Nghĩa là máy tính cục bộ của bạn không nhận ra máy chủ từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với một máy chủ mới. Nhập "yes" và nhấn ENTER để tiếp tục.

      Tiếp theo, tiện ích sẽ quét tài khoản cục bộ của bạn cho khóa id_rsa.pub mà chúng ta đã tạo ra trước đó. Khi tìm thấy khoá, nó sẽ nhắc bạn nhập mật khẩu của tài khoản người dùng từ xa: 

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

      Nhập mật khẩu (việc nhập của bạn sẽ không được hiển thị vì mục đích bảo mật) và nhấn ENTER. Tiện ích sẽ kết nối với tài khoản trên máy chủ từ xa sử dụng mật khẩu bạn cung cấp. Sau đó nó sẽ sao chép nội dung của khóa  ~/.ssh/id_rsa.pub vào một tệp trong thư mục  ~/.ssh của tài khoản từ xa được gọi là authorized_keys.

      Bạn sẽ thấy kết quả sau:

      Output
      Number 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.
       

      ALúc này, khóa  id_rsa.pub đã được tải lên tài khoản từ xa . Bạn có thể tiếp tục Bước 3

      Sao chép Public Key sử dụng SSH

      Nếu không có ssh-copy-id ,nhưng bạn có quyền truy cập SSH dựa trên mật khẩu vào tài khoản trên máy chủ của mình, bạn có thể tải lên các khóa của mình bằng phương pháp SSH thông thường.

      Bạn có thể sử dụng câu lệnh cat để đọc nội dung khóa SSH công khai trên máy tính cục bộ và đường dẫn thông qua kết nối SSH đến máy chủ từ xa. Mặt khác, đảm bảo rằng thư mục ~/.ssh  tồn tại dưới tài khoản bạn đang dùng và sau đó đưa ra nội dung chúng ta đã đưa vào một tệp tin trong thư mục này gọi là  authorized_keys .

      Chúng ta sẽ sử dụng biểu tượng chuyển hướng >> để nối thêm nội dung thay vì ghi đè lên nó. Điều này sẽ cho phép thêm keys mà không phá hủy keys đã được thêm vào trước đó.

      Câu lệnh đầy đủ như sau:

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

      Bạn có thể nhìn thấy dòng thông báo sau:

      Output
      The 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
       

      Điều này có nghĩa là máy tính cục bộ của bạn không nhận ra máy chủ từ xa. Điều này sẽ xảy ra lần đầu tiên bạn kết nối với một máy chủ mới. Nhập "yes" và nhấn ENTER để tiếp tục.

      Sau đó, bạn sẽ được nhắc nhập mật khẩu tài khoản người dùng từ xa:

      Outputusername@111.111.11.111's password:
       
       

      Sau khi nhập mật khẩu (việc nhập của bạn sẽ không được hiển thị),nội dung của khóa id_rsa.pub sẽ được sao chép vào cuối tệp authorized_keys của tài khoản người dùng từ xa.

      Sau khi kết thúc phần này , tiếp tục Bước 3. 

      Sao chép Public Key thủ công

      Nếu bạn không có quyền truy cập SSH dựa trên mật khẩu vào máy chủ của mình, bạn sẽ phải sao chép khóa công khai thủ công.

      Trong phần này, chúng ta sẽ tự nối thêm nội dung của tệp id_rsa.pub đến tệp  ~/.ssh/authorized_keys trên thiết bị từ xa của bạn .

      Để hiện thị nội dung của khóa id_rsa.pub , gõ câu lệnh này vào máy tính cục bộ của bạn:

      cat ~/.ssh/id_rsa.pub

      Bạn sẽ thấy nội dung của khóa trông như thế này :

      Output
      ssh-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 máy chủ từ xa của bạn bằng cách sử dụng bất kỳ phương pháp nào bạn có.

      Một khi bạn đã truy cập vào tài khoản của bạn trên máy chủ từ xa, bạn nên chắc chắn thư mục ~/.ssh tồn tại . Câu lệnh này sẽ tạo ra thư mục nếu cần thiết, hoặc sẽ không làm gì nếu nó tồn tại .

      Bây giờ , bạn có thể tạo và sửa đổi tệp authorized_keys trong thư mục này. Bạn có thể thêm nội dung của tệp id_rsa.pub vào cuối tệp authorized_keys ,tạo nó nếu cần thiết, sử dụng câu lệnh này:

      echo public_key_string >> ~/.ssh/authorized_keys

      Trong lệnh trên, thay thế public_key_stringvới đầu ra từ lệnh cat ~/.ssh/id_rsa.pub mà bạn đã thực hiện trên hệ thống cục bộ của bạn. Nó nên bắt đầu với ssh-rsa AAAA...

      Bây giờ chúng ta có thể thử xác thực không mật khẩu với máy chủ CentOS 

       

      Bước 3 - Xác thực tới máy chủ CentOS của bạn Sử dụng SSH Keys

      Nếu bạn đã hoàn thành một trong các thủ tục ở trên, bạn sẽ có thể đăng nhập vào máy chủ từ xa nếu không có mật khẩu của tài khoản từ xa.

      Qúa trình cơ bản như sau:

      ssh username@remote_host

      Nếu đây là lần đầu tiên kết nối với máy chủ lưu trữ này (nếu bạn đã sử dụng phương pháp cuối cùng ở trên),bạn có thể thấy một số điều sau:

      Output
      The 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
       

      Nghĩa là máy tính cục bộ của bạn không nhận ra máy chủ từ xa . Nhập "yes" và sau đó nhấn ENTER để tiếp tục.

      Nếu bạn không cung cấp cụm mật khẩu cho khóa cá nhân, bạn sẽ được đăng nhập ngay lập tức. Nếu bạn cung cấp cụm mật khẩu cho khóa cá nhân khi tạo nó, bạn sẽ được nhắc nhập cụm từ mật khẩu bây giờ. Sau khi xác thực, phiên làm việc mới sẽ mở ra cho bạn với tài khoản được cấu hình trên máy chủ CentOS.

      Nếu xác thực dựa trên khóa thành công, hãy tiếp tục tìm hiểu cách tiếp tục bảo vệ hệ thống của bạn bằng cách tắt xác thực mật khẩu.

       

      Bước 4 - Tắt xác thực mật khẩu trên máy chủ của bạn

      Nếu bạn có thể đăng nhập vào tài khoản của mình bằng cách sử dụng SSH mà không có mật khẩu, bạn đã cấu hình thành công xác thực dựa trên SSH cho tài khoản của bạn. Tuy nhiên, cơ chế xác thực dựa trên mật khẩu của bạn vẫn hoạt động, có nghĩa là máy chủ của bạn vẫn tiếp xúc với các cuộc tấn công bạo lực.

      Trước khi hoàn tất các bước trong phần này, hãy đảm bảo rằng bạn có xác thực dựa trên khoá SSH được định cấu hình cho tài khoản gốc trên máy chủ này hoặc tốt hơn là bạn có xác thực dựa trên khoá SSH được định cấu hình cho tài khoản không phải gốc trên này máy chủ với đặc quyền sudo .Bước này sẽ khóa các đăng nhập dựa trên mật khẩu, do đó đảm bảo rằng bạn vẫn có thể có quyền truy cập quản trị là rất quan trọng.

      Khi bạn đã xác nhận rằng tài khoản từ xa của bạn có đặc quyền quản trị viên, đăng nhập vào máy chủ từ xa của bạn bằng khóa SSH, dưới dạng gốc hoặc với một tài khoản có đặc quyền sudo .Sau đó mở tệp cấu hình của SSH daemon:

      sudo vi /etc/ssh/sshd_config

      Bên trong tệp, tìm kiếm một chỉ thị được gọi là PasswordAuthentication. Điều này có thể được ghi chú .Nhấn i để chèn văn bản, và sau đó bỏ ghi chú dòng và đặt giá trị là "không". Điều này sẽ vô hiệu hóa khả năng đăng nhập qua SSH bằng mật khẩu tài khoản:

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

      Khi đã kết thúc các thay đổi ,nhấn ESC và sau đó  :wq để viết các thay đổi tệp và thoát ra. Để thực hiện những thay đổi này, chúng ta cần phải khởi động lại dịch vụ sshd:

      sudo systemctl restart sshd.service

      Để phòng ngừa, hãy mở cửa sổ thiết bị đầu cuối mới và kiểm tra xem dịch vụ SSH có đang hoạt động chính xác trước khi đóng phiên này không:

      ssh username@remote_host

       

      Khi bạn đã xác minh dịch vụ SSH của mình, bạn có thể đóng tất cả các phiên máy chủ hiện tại một cách an toàn.

      SSH daemon trên máy chủ CentOS của bạn bây giờ chỉ đáp ứng SSH Keys. Xác thực dựa trên mật khẩu đã bị tắt thành công.

       

      Kết luận

      Bây giờ, bạn phải có xác thực dựa trên khoá SSH được định cấu hình trên máy chủ của mình, cho phép bạn đăng nhập mà không cần cung cấp mật khẩu tài khoản.