Duy trì thông tin đăng nhập SSH là một phần quan trọng trong giao thức bảo mật của mọi quản trị viên. Bài viết hôm nay sẽ chỉ cho bạn cách có thể giảm bớt các key cần duy trì bằng cách liên kết thông tin đăng nhập SSH với GPG key.
Tại sao nên sử dụng GPG key để đăng nhập vào SSH?
Một trong những lợi thế của việc sử dụng GPG key để đăng nhập SSH là dễ dàng di chuyển giữa các máy chủ. Mọi hệ điều hành ngày nay đều có công cụ GUI hoặc CLI tương tác với GPG. Ví dụ, GNU Kleopatra có sẵn cho Linux và Windows và công cụ GnuPG có sẵn cho cả Linux và macOS.
Một ưu điểm khác của GPG key là, không giống như SSH key, bạn có thể sử dụng chúng cho nhiều tác vụ liên quan đến bảo mật. Ngoài SSH, bạn có thể tạo các subkey bổ sung để ký email và mã hóa file. Do đó, GPG key cho phép bạn hợp nhất phần lớn cuộc sống số của mình thành một số bit bảo mật dễ bảo trì.
Cuối cùng, việc sử dụng GPG qua SSH sẽ không thay đổi bất kỳ cơ sở hạ tầng hiện có nào trên các máy từ xa. Điều này là do GPG chuyển đổi key xác thực của nó thành định dạng “tương thích với SSH”. Do đó, bạn có thể xuất public GPG key “tương thích với SSH” của mình sang máy chủ SSH và ngay lập tức sử dụng nó để đăng nhập.
Chuẩn bị GPG key cho SSH
Bước đầu tiên khi sử dụng GPG key trên SSH là tạo subkey mới. Việc làm này sẽ cho phép chia sẻ chi tiết xác thực SSH mà không ảnh hưởng đến danh tính GPG chính của bạn.
Bắt đầu bằng cách mở GPG prompt cho key chính:
gpg --expert --edit-key YOUR-KEY@EMAIL.ADDRESS
Lưu ý: Bạn có thể tìm địa chỉ email cho key chính của mình bằng cách liệt kê nội dung của key: gpg --list-keys.
Nhập “addkey” trên GPG prompt, chọn “8”, sau đó nhấn Enter.
Đặt khả năng của subkey thành “=A” rồi nhấn Enter.
Nhập “4096” vào lời nhắc kích thước key, sau đó nhấn Enter.
Đặt khoảng thời gian hợp lý cho tính hợp lệ của subkey. Trong trường hợp này, ví dụ sẽ gõ “1y” để làm cho subkey mới chỉ có hiệu lực trong một năm.
Tạo subkey GPG mới bằng cách nhập “y”, sau đó nhấn Enter trên lời nhắc xác nhận của trình hướng dẫn.
Gõ “quit”, sau đó nhấn Enter để thoát khỏi GPG prompt.
Xác nhận rằng subkey mới đang hoạt động bình thường bằng cách lấy thông tin chi tiết về key chính:
gpg --list-keys YOUR-KEY@EMAIL.ADDRESS
Kích hoạt hỗ trợ SSH trong GPG
Khi subkey được thiết lập và chạy, giờ đây bạn có thể cấu hình daemon SSH của mình để chấp nhận các yêu cầu gpg-agent đến. Để làm điều đó, hãy thêm “enable-ssh-support” vào file “gpg-agent.conf” của người dùng hiện tại:
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
Mở file “.bashrc” bằng trình soạn thảo văn bản yêu thích:
nano ~/.bashrc
Dán các dòng code sau vào cuối file .bashrc:
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)<br>gpgconf --launch gpg-agent
Lưu file bashrc, sau đó in keygrip của subkey:
gpg --list-keys --with-keygrip
Sao chép keygrip của subkey, sau đó tạo file “sshcontrol” trong thư mục .gnupg:
nano ~/.gnupg/sshcontrol
Dán keygrip danh tính của bạn vào trong file mới, sau đó lưu nó.
Áp dụng cấu hình SSH và GPG mới bằng cách load lại file bashrc trên phiên terminal hiện tại:
source ~/.bashrc
Kiểm tra xem daemon SSH hiện có hoạt động bình thường hay không bằng cách liệt kê SSH public key của nó:
ssh-add -l
Xuất và kiểm tra GPG key
Tại thời điểm này, bạn đã có daemon SSH được liên kết chính xác với GPG agent của mình. Để sử dụng nó, hãy tạo key xuất SSH bằng lệnh sau:
gpg --ssh-export-key YOUR-KEY@EMAIL.ADDRESS > ~/authorized_keys
Đặt các bit quyền của key xuất thành chỉ người dùng mới có thể đọc và ghi được:
chmod 600 ~/authorized_keys
Gửi file ủy quyền mới đến máy chủ từ xa bằng scp:
scp ~/authorized_keys YOUR-REMOTE.SERVER.DOMAIN:~/.ssh/authorized_keys
Đăng nhập vào máy chủ từ xa, sau đó khởi động lại daemon SSH để áp dụng key mới:
sudo systemctl restart ssh.service
Nhấn Ctrl + D, sau đó đăng nhập lại vào máy chủ SSH từ xa. Thao tác này sẽ đưa ra lời nhắc mới yêu cầu nhập mật khẩu GPG key chính.
Liên kết GPG key với daemon SSH và xuất nó sang máy chủ từ xa chỉ là một số điều bạn có thể thực hiện với SSH. Khám phá những gì có thể làm với phần mềm tuyệt vời này bằng cách sử dụng SSH với các UNIX pipe trong Linux.