Thứ tư, 14/01/2015 | 00:00 GMT+7

Cách cấu hình xác thực dựa trên khóa SSH trên server FreeBSD

SSH, hay shell an toàn, là một giao thức mạng cung cấp một cách thức an toàn, được mã hóa để giao tiếp và quản trị các server của bạn. Vì SSH là cách phổ biến nhất để làm việc với server FreeBSD, bạn cần tự làm quen với các cách khác nhau mà bạn có thể xác thực và đăng nhập vào server của bạn . Trong khi có một số cách đăng nhập vào server FreeBSD, hướng dẫn này sẽ tập trung vào việc cài đặt và sử dụng SSH key để xác thực.

Cách hoạt động của các phím SSH

Server SSH có thể xác thực client bằng nhiều phương pháp khác nhau. Các phương pháp phổ biến nhất bao gồm xác thực bằng password và SSH key . Mặc dù password cung cấp một rào cản chống lại sự truy cập trái phép, nhưng việc sử dụng SSH key thường an toàn hơn nhiều.

Vấn đề với password là chúng thường được tạo theo cách thủ công, không có đủ độ dài hoặc độ phức tạp trong nội dung. Do đó, họ có thể dễ bị tổn hại bởi các cuộc tấn công vũ phu. Khóa SSH cung cấp một giải pháp thay thế an toàn tin cậy .

Các cặp SSH key được dùng thay cho password để xác thực và mỗi cặp khóa bao gồm một private key và một public key tương ứng.

Khóa cá nhân hoạt động tương tự như password và được giữ trên client . Nội dung của nó phải được giữ bí mật — nếu một người không được phép truy cập vào private key của bạn, nó sẽ bị coi là bị xâm phạm và cần được thay thế ngay lập tức. Khóa cá nhân thường có độ dài ít nhất 2048 bit và có thể được mã hóa tùy chọn bằng passphrase (password bảo vệ) (về cơ bản là password được yêu cầu để sử dụng private key ) để hạn chế việc sử dụng nó trong trường hợp người không được phép truy cập vào khóa.

Khóa công khai liên quan có thể được chia sẻ tự do mà không có bất kỳ hậu quả tiêu cực nào. Nó được dùng để mã hóa các thông báo mà chỉ private key mới có thể giải mã — đây là cơ sở của cách xác thực SSH key hoạt động.

Để cho phép sử dụng private key để xác thực, public key tương ứng được cài đặt vào account của user trên server từ xa. Khóa công khai phải được thêm vào một file đặc biệt trong thư .ssh/authorized_keys của user từ xa được gọi là .ssh/authorized_keys . Khi client cố gắng kết nối với server từ xa, server có thể xác minh xem client có private key ơng ứng với một trong các khóa được ủy quyền hay không — nếu private key được xác minh trùng với public key được ủy quyền, client được xác thực và phiên shell được chạy .

Cách tạo cặp SSH key

Bước đầu tiên trong việc cài đặt xác thực SSH key là tạo một cặp SSH key trên máy tính local của bạn, máy tính mà bạn sẽ đăng nhập.

Để tạo cặp SSH key , bạn có thể sử dụng trình ssh-keygen . Theo mặc định, nó sẽ tạo một cặp khóa RSA 2048-bit, đủ cho hầu hết các trường hợp.

Trong terminal của máy tính local của bạn, tạo một cặp khóa bằng lệnh sau:

ssh-keygen 

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

Generating public/private rsa key pair. Enter file in which to save the key (/home/username/.ssh/id_rsa): 

Tại dấu nhắc , bạn có thể chấp nhận vị trí khóa mặc định hoặc nhập một đường dẫn khác. Nếu bạn chấp nhận mặc định, các khóa sẽ được lưu trữ trong .ssh , trong .ssh của user của bạn. Khóa riêng tư sẽ được gọi là id_rsa và public key sẽ được gọi là id_rsa.pub .

Nếu bạn chỉ mới bắt đầu với các SSH key , tốt nhất là bạn nên giữ vị trí mặc định. Làm như vậy sẽ cho phép ứng dụng SSH của bạn tự động tìm thấy các SSH key của bạn khi cố gắng xác thực. Nếu bạn muốn chọn một đường dẫn không chuẩn, hãy nhập đường dẫn đó ngay bây giờ, nếu không, hãy để trống dấu nhắc và nhấn RETURN để chấp nhận mặc định.

Nếu trước đây bạn đã tạo cặp SSH key , bạn có thể thấy một dấu nhắc như sau:

/home/username/.ssh/id_rsa already exists. Overwrite (y/n)? 

Nếu bạn chọn overrides khóa hiện có, khóa đó sẽ bị xóa và bạn sẽ không thể sử dụng nó để xác thực nữa. Đó là, bạn không nên overrides nó trừ khi bạn chắc chắn rằng bạn không cần nó để xác thực cho bất kỳ server nào của bạn.

Đến đây, bạn sẽ thấy dấu nhắc cho passphrase (password bảo vệ) :

Created directory '/home/username/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again:  

Passphrase (password bảo vệ) tùy chọn này được sử dụng để mã hóa private key . Nếu bạn đặt passphrase (password bảo vệ) ở đây, nó sẽ được yêu cầu khi nào bạn sử dụng private key để xác thực — nghĩa là, xác thực sẽ yêu cầu cả private key passphrase (password bảo vệ) của nó, điều này có thể cung cấp bảo mật bổ sung nếu private key bị xâm phạm bằng cách nào đó. Nếu bạn để trống passphrase (password bảo vệ) , bạn có thể sử dụng private key để đăng nhập vào server của bạn mà không cần mật khẩu — nghĩa là, xác thực sẽ diễn ra chỉ dựa trên private key của bạn, vì vậy hãy đảm bảo giữ khóa an toàn.

Sau đó, bạn sẽ thấy kết quả sau, sẽ cho bạn biết nơi private key và public key đang được tạo, cùng với các chi tiết khác:

Your identification has been saved in /home/sammy/.ssh/id_rsa. Your public key has been saved in /home/sammy/.ssh/id_rsa.pub. The key fingerprint is: 76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer The key's randomart image is: +--[ RSA 2048]----+ |          . ...o.| |         . o  o .| |          . .E.+.| |         o   .ooo| |      o S .   o..| |       X +     . | |      o +        | |         +       | |        o        | +-----------------+ 

Đến đây bạn có một cặp SSH key công khai và riêng tư, bạn cần cài đặt public key trên các server mà bạn muốn sử dụng xác thực SSH key để đăng nhập.

Cách Nhúng Khóa Công khai của bạn khi Tạo Server của bạn

Trên Control panel DigitalOcean, trong quá trình tạo server , bạn có tùy chọn thêm một hoặc nhiều SSH key công khai vào server đang được tạo. Đối với server FreeBSD, SSH key công khai này sẽ được cài đặt trên user freebsd , người có quyền siêu user .

Giả sử rằng bạn đã tạo cặp SSH key của bạn ở vị trí mặc định, public key của bạn được đặt tại ~/.ssh/id_rsa.pub . Khóa công khai là những gì bạn muốn thêm vào server mới.

Trên máy tính local của bạn, nhập lệnh này vào terminal để in SSH key công khai của bạn:

cat ~/.ssh/id_rsa.pub 

Bây giờ hãy bắt đầu quá trình tạo server thông qua Control panel DigitalOcean. Đặt tên cho server và thực hiện các lựa chọn mong muốn của bạn cho đến khi bạn đến phần Thêm SSH key (Tùy chọn) , ngay trước nút “Tạo server ”.

Thêm SSH key

Nhấp vào liên kết + Thêm SSH key . Thao tác này sẽ mở ra một biểu mẫu cho phép bạn thêm SSH key công khai của bạn .

Trong trường nội dung Khóa SSH , hãy dán nội dung của SSH key công khai của bạn (sao chép nó từ terminal của bạn và paste vào ). Bạn cũng có thể gắn nhãn SSH key của bạn bằng cách sử dụng trường Comment (tùy chọn) . Nó trông giống như sau :

Thêm nội dung chính SSH

Bây giờ hãy nhấp vào nút Thêm SSH key màu xanh lục để thêm SSH key công khai vào account DigitalOcean của bạn. SSH mới được thêm vào sẽ được chọn tự động (được đánh dấu bằng màu xanh lam), điều này cho biết rằng nó sẽ được thêm vào server mới. Nó sẽ giống như thế này:

Chọn SSH key

Bây giờ kết thúc quá trình tạo server bằng cách nhấp vào nút Tạo server .

Khóa SSH đã chọn sẽ tự động được thêm vào account của user freebsd . Khi server khởi động, bạn có thể xác thực server với quyền là user freebsd bằng cách sử dụng private key ơng ứng.

Lưu ý SSH key đã được thêm vào account DigitalOcean của bạn và hiện có thể được thêm vào bất kỳ server nào bạn tạo trong tương lai bằng cách chỉ cần chọn nó trong quá trình tạo server .

Cách sao chép public key vào server của bạn

Nếu bạn đã có một server FreeBSD và bạn không thêm SSH key vào nó trong quá trình tạo (như được mô tả trong phần trước), có một số cách khác để thêm public key và sử dụng private key để xác thực với server của bạn . Mỗi phương pháp kết thúc với cùng một kết quả, khả năng xác thực cho một user cụ thể trên server bằng cặp SSH key của bạn. Lưu ý bạn có thể lặp lại bất kỳ phương pháp nào trong số các phương pháp này để cài đặt nhiều SSH key (cho phép truy cập vào chủ sở hữu của bất kỳ private key ơng ứng nào).

Ta sẽ mô tả một vài phương pháp khác nhau, bắt đầu với phương pháp đơn giản nhất. Chỉ cần sử dụng phương pháp mà bạn có công cụ và cảm thấy thoải mái nhất.

Sao chép Khóa công khai của bạn bằng SSH-Copy-ID

Nếu bạn có tiện ích ssh-copy-id trên máy tính local của bạn , bạn có thể sử dụng trình này để dễ dàng thêm SSH key công khai vào server từ xa mà bạn có quyền truy cập SSH dựa trên password . Tiện ích ssh-copy-id thường, nhưng không phải lúc nào cũng có trong gói OpenSSH (cùng một tiện ích cung cấp sshssh-keygen ).

Để kiểm tra xem bạn có công cụ này trên máy tính local hay không, chỉ cần thử chạy ssh-copy-id từ dòng lệnh. Nếu nó không có sẵn, bạn sẽ nhận được lỗi "không tìm thấy lệnh". Nếu bạn không có sẵn tiện ích, bạn có thể cài đặt thử cài đặt nó hoặc sử dụng một trong các phương pháp khác được mô tả trong các phần phụ sau.

Để sử dụng ssh-copy-id , bạn phải chỉ định địa chỉ IP hoặc domain của server từ xa và user thêm SSH key công khai vào. Nó có thể chạy như thế này (thay thế các phần được đánh dấu bằng thông tin thích hợp):

ssh-copy-id username@remote_host 

Bạn có thể thấy một thông báo như thế này:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe. Are you sure you want to continue connecting (yes/no)? yes 

Điều này nghĩa là máy tính local của bạn không nhận ra server từ xa vì nó chưa bao giờ cố gắng sử dụng SSH để kết nối với nó trước đây. Trả lời dấu nhắc bằng yes rồi nhấn RETURN để tiếp tục.

Tiện ích sẽ quét account user local của bạn để tìm public key mà bạn đã tạo trước đó, id_rsa.pub . Khi nó được tìm thấy, bạn sẽ được yêu cầu nhập password cho user trên server 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.222.11.222's password: 

Nhập password , sau đó nhấn RETURN . Tiện ích sẽ kết nối với account user trên server từ xa và cài đặt public key của bạn, id_rsa.pub . Khóa được cài đặt bằng cách sao chép nội dung public key của bạn vào một file có tên .ssh/authorized_keys của user từ xa.

Nếu sao chép thành công, bạn sẽ thấy kết quả như sau:

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

Vì public key của bạn được cài đặt trong file authorized_keys của user từ xa, private key tương ứng ( id_rsa trên máy tính local của bạn) sẽ được chấp nhận làm xác thực cho user trên server từ xa.

Tiếp tục đến phần Xác thực server của bạn bằng SSH key để đăng nhập vào server của bạn bằng SSH key .

Sao chép Khóa công khai của bạn bằng SSH

Nếu bạn không có ssh-copy-id trên máy tính local của bạn , nhưng bạn có quyền truy cập SSH dựa trên password vào server của bạn , bạn có thể cài đặt public key của bạn bằng cách sử dụng client SSH.

Phương pháp này hoạt động bằng cách xuất SSH key công khai trên máy tính local của bạn và chuyển nó qua SSH đến server gỡ bỏ. Trên server từ xa, ta thực hiện một số lệnh để tạo ~/.ssh , nếu nó chưa tồn tại, sau đó thêm public key vào một file có tên là authorized_keys vào folder . Ta sẽ sử dụng chuyển hướng >> để nối khóa vào file authorized_keys , nếu nó đã tồn tại, trong trường hợp bất kỳ SSH key công cộng nào đã được cài đặt trên account của user từ xa (vì vậy chúng sẽ không bị overrides và bị xóa dưới dạng khóa được ủy quyền).

Giả sử public key của bạn có tên mặc định là id_rsa.pub , đây là lệnh cài đặt SSH key công khai (thay thế user và server từ xa):

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

Bạn có thể thấy một thông báo như thế này:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe. Are you sure you want to continue connecting (yes/no)? yes 

Điều này nghĩa là máy tính local của bạn không nhận ra server từ xa vì nó chưa bao giờ cố gắng sử dụng SSH để kết nối với nó trước đây. Trả lời dấu nhắc bằng yes rồi nhấn RETURN để tiếp tục.

Đến đây bạn sẽ được yêu cầu nhập password của user từ xa:

username@111.222.11.222's password: 

Nhập password , sau đó nhấn RETURN . Nếu lệnh được thực hiện thành công, bạn sẽ không nhận được bất kỳ phản hồi nào. Nội dung của id_rsa.pub , public key của bạn, sẽ được thêm vào cuối file authorized_keys quyền_của user từ xa.

Tiếp tục đến phần Xác thực server của bạn bằng SSH key để đăng nhập vào server của bạn bằng SSH key .

Sao chép public key của bạn theo cách thủ công

Nếu bạn muốn cài đặt public key theo cách thủ công, bạn có thể sử dụng quyền truy cập SSH hoặc console để thực hiện . Bạn cần đăng nhập vào server từ xa với quyền là user mà bạn muốn cài đặt public key .

Quá trình cơ bản là lấy SSH key công khai của bạn, nội dung của id_rsa.pub và thêm nó vào file .ssh/authorized_keys trong folder chính của user trên server từ xa.

Đầu tiên, đăng nhập vào server từ xa. Nếu bạn không sử dụng console trong Control panel DigitalOcean, hãy sử dụng lệnh sau để kết nối qua SSH:

ssh username@remote_host 

Bạn có thể thấy một thông báo như thế này:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe. Are you sure you want to continue connecting (yes/no)? yes 

Điều này nghĩa là máy tính local của bạn không nhận ra server từ xa vì nó chưa bao giờ cố gắng sử dụng SSH để kết nối với nó trước đây. Trả lời dấu nhắc bằng yes rồi nhấn RETURN để tiếp tục.

Đến đây bạn sẽ được yêu cầu nhập password của user từ xa:

Password for username@111.222.11.222: 

Đến đây bạn nên tạo một .ssh trong thư .ssh chính của user từ xa, nếu nó chưa tồn tại. Lệnh này sẽ thực hiện điều đó:

mkdir -p ~/.ssh 

Trên máy tính local của bạn, nhập lệnh này vào terminal để in SSH key công khai của bạn:

cat ~/.ssh/id_rsa.pub 

Sao chép kết quả vào clipboard của bạn, sau đó mở file authorized_keys quyền_key trong editor mà bạn chọn. Ta sẽ sử dụng ee ở đây:

ee ~/.ssh/authorized_keys 

Dán public key của bạn vào file authorized_keys quyền_có, sau đó lưu và thoát. Nếu bạn đang sử dụng ee , lưu và thoát bằng cách nhấn ESC sau đó là a sau đó a lần nữa.

Khóa SSH công khai của bạn hiện đã được cài đặt trên server từ xa. Tiếp tục đến phần tiếp theo để đăng nhập vào server của bạn bằng các SSH key .

Xác thực với server của bạn bằng SSH key

Nếu bạn đã cài đặt thành công SSH key công khai trên server FreeBSD của bạn bằng một trong các phương pháp trên, bạn có thể đăng nhập vào server bằng xác thực khóa. Nghĩa là, bạn sẽ không cần password của user từ xa để đăng nhập.

Cố gắng đăng nhập vào server từ xa bằng SSH:

ssh username@remote_host 

Nếu bạn không tạo cặp SSH key của bạn bằng passphrase (password bảo vệ) , bạn sẽ được đăng nhập ngay lập tức. Nếu bạn đã tạo cặp khóa của bạn bằng passphrase (password bảo vệ) , bạn sẽ được yêu cầu nhập cặp khóa đó.

Nếu bạn đã đăng nhập vào server của bạn , điều đó nghĩa là SSH key đã được cài đặt thành công.

Lưu ý cả xác thực dựa trên password và khóa hiện đã được bật cho user này. Nếu bạn muốn tắt xác thực password cho server của bạn , làm cho server an toàn hơn bằng cách yêu cầu SSH key để đăng nhập, hãy đọc phần tiếp theo.

Tắt xác thực password trên server của bạn

Nếu bạn có thể đăng nhập vào account của bạn bằng SSH mà không cần password , bạn đã cấu hình thành công xác thực dựa trên SSH key cho account của bạn . Tuy nhiên, cơ chế xác thực dựa trên password của bạn vẫn hoạt động, nghĩa là server của bạn vẫn bị tấn công brute-force.

Trước khi hoàn tất các bước trong phần này, hãy đảm bảo bạn đã cấu hình xác thực dựa trên SSH key cho account root trên server này hoặc tốt hơn là bạn đã cấu hình xác thực dựa trên SSH key cho account trên server này với quyền truy cập sudo. Bước này sẽ khóa các đăng nhập dựa trên password , do đó, đảm bảo bạn vẫn có thể có quyền truy cập quản trị là điều cần thiết.

Sau khi các điều kiện trên là đúng, hãy đăng nhập vào server từ xa của bạn bằng các SSH key , với account root hoặc bằng account có quyền sudo. Mở file cấu hình SSH daemon:

sudo ee /etc/ssh/sshd_config 

Trong file , hãy tìm một chỉ thị có tên là ChallengeResponseAuthentication . Nó có thể được comment ra. Bỏ comment , bằng cách xóa ký tự # , sau đó đặt giá trị thành “no” . Nó sẽ trông như thế này khi bạn hoàn thành:

ChallengeResponseAuthentication no 

Lưu và đóng file . Nếu bạn đang sử dụng ee , lưu và thoát bằng cách nhấn ESC sau đó là a sau đó a lần nữa.

Để các thay đổi có hiệu lực, bạn phải khởi động lại dịch vụ sshd . Để khởi động lại daemon SSH trên FreeBSD, hãy sử dụng lệnh sau:

sudo service sshd restart 

Như vậy, bất kỳ truy cập SSH nào vào server đều phải sử dụng xác thực SSH key , vì xác thực password đã bị vô hiệu hóa.

Kết luận

Đến đây bạn sẽ có xác thực dựa trên SSH key và chạy trên server FreeBSD của bạn , cho phép bạn đăng nhập mà không cần cung cấp password user . Từ đây, bạn có thể cần đọc thêm về cách bảo mật server FreeBSD của bạn . Nếu bạn muốn tìm hiểu thêm về cách làm việc với SSH, hãy xem hướng dẫn cơ bản về SSH của ta .


Tags:

Các tin liên quan

Giới thiệu so sánh về FreeBSD cho người dùng Linux
2015-01-14
Tại sao bạn có thể không muốn chạy mail server của riêng mình
2014-12-11
Cách kiểm tra lưu lượng mạng trong server LAMP với sysdig trên CentOS 7
2014-12-05
Giới thiệu về quyền của Linux
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Giới thiệu về Linux Terminal
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Quản lý tệp và điều hướng Linux cơ bản
2014-11-14
Cách tạo server để gửi thông báo đẩy bằng GCM tới thiết bị Android bằng Python
2014-11-11
Cách cài đặt và cấu hình server Mumble (Murmur) trên Ubuntu 14.04
2014-11-11