· macos / security / ssh

1Password SSH Agent: SSH key manager tốt nhất cho Mac 2026

1Password SSH Agent lưu key trong vault mã hóa, yêu cầu Touch ID mỗi lần, và tự thiết lập git commit signing. Đây là lựa chọn tốt nhất cho lập trình viên Mac.

Bởi

2.429 từ · 13 phút đọc

1Password SSH Agent là lựa chọn phù hợp cho hầu hết lập trình viên Mac. Tool này lưu SSH key trong một vault được mã hóa, yêu cầu Touch ID cho mỗi lần xác thực, và xử lý git commit signing qua op-ssh-sign mà không cần chỉnh thủ công bất kỳ file config nào. Gói individual $2.99/tháng bao gồm toàn bộ. Nếu subscription là điều không thể chấp nhận, Bitwarden có SSH agent miễn phí, tuy ít tài liệu cộng đồng hơn. Còn nếu bạn chỉ dùng macOS và muốn key được bảo vệ bằng phần cứng — hoàn toàn không thể export dưới bất kỳ hình thức nào — thì Secretive là công cụ cho trường hợp hẹp đó.

Plain ssh-agent với key lưu trên disk là đủ nếu bạn chỉ có một máy duy nhất, không cần forwarding, và không làm việc nhóm. Điều đó thực ra ít phổ biến hơn hầu hết lập trình viên nghĩ.

Bài này dành cho ai

Lập trình viên Mac đang quản lý từ ba SSH host trở lên và hiện lưu key dưới dạng plaintext trong ~/.ssh/. Nếu bạn đã mua 1Password cho mật khẩu và muốn biết có nên thêm SSH vào không — câu trả lời là có. SSH agent dùng cùng subscription, cùng vault, cùng app. Nếu miễn phí là yêu cầu bắt buộc, hãy bắt đầu từ phần Bitwarden.

Những gì chúng tôi đã thử nghiệm

ToolPhiên bảnNền tảng
1Password SSH Agent8.10.xmacOS Sequoia 15.x, Ubuntu 24.04
Bitwarden SSH Agentv2025.1.2 (Jan 2025)macOS Sequoia 15.x
Secretive3.0.4macOS Sequoia 15.x
Plain ssh-agentOpenSSH 9.8macOS Sequoia 15.x

Máy thử nghiệm: M-series MacBook Pro, 16 GB RAM, macOS Sequoia 15.x.

Thử nghiệm end-to-end: tạo key, xác thực SSH đến remote Linux host, git commit signing bao gồm badge “Verified” trên GitHub, sử dụng DevContainer trên macOS, và import key từ định dạng OpenSSH hiện có.

Mối đe dọa bạn thực sự cần giải quyết

Hầu hết lập trình viên đang có ~/.ssh/id_ed25519 lưu không mã hóa trên disk mà không có passphrase. Bất kỳ process nào chạy dưới quyền user của bạn đều có thể đọc được — malware, một npm install script bị tấn công, hay một tool nào đó bạn chạy theo hướng dẫn từ GitHub README.

Agent forwarding làm tình huống này tệ hơn. Khi bạn ssh -A vào một jump host, root trên host đó có thể sử dụng agent socket của bạn trong suốt session. Key của bạn xác thực bất kỳ đâu chúng được ủy quyền — âm thầm, không cần bạn hay biết.

Giải pháp gồm bốn phần:

  1. Key được lưu mã hóa, không phải dưới dạng plaintext trên disk.
  2. Touch ID mỗi lần dùng — xác nhận sinh trắc học rằng một người thật đã phê duyệt thao tác cụ thể này.
  3. Git commit signing — chứng minh commit đến từ bạn, không phải từ bất kỳ ai có quyền push.
  4. Chia sẻ trong team — deployment key được chia sẻ qua vault thay vì gửi file .pem qua email.

SSH key manager giải quyết cả bốn. Câu hỏi là tool nào phù hợp với tình huống của bạn.

1Password SSH Agent

1Password SSH Agent ra mắt năm 2022, hỗ trợ Ed25519 và RSA (2048, 3072, 4096 bit). Không có DSA, không có ECDSA — đây là quyết định có chủ đích, không phải thiếu sót.

Cài đặt: Vào 1Password Settings → Developer, bật SSH agent. Thêm đoạn này vào ~/.ssh/config:

Host *
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Tạo hoặc import key trong 1Password vault, sau đó thêm public key vào GitHub hoặc server của bạn. Như vậy là xong phần cài đặt cơ bản.

Touch ID mỗi thao tác: Mỗi lần gọi ssh đều kích hoạt prompt Touch ID hoặc Apple Watch. Bạn thấy key nào đang được dùng, host nào đang yêu cầu, và bạn phê duyệt hoặc từ chối một cách rõ ràng.

Git commit signing: Nút “Configure Commit Signing” trong SSH key item của 1Password tự động ghi các entry vào .gitconfiggpg.format = ssh, user.signingKey, gpg.ssh.program. Tool này đặt op-ssh-sign (tại /Applications/1Password.app/Contents/MacOS/op-ssh-sign) làm signing binary. Sau đó git commit -S và badge “Verified” trên GitHub hoạt động ngay mà không cần config thêm.

Đa nền tảng: macOS, Windows, Linux (native package — không phải Flatpak hay Snap). Người dùng Linux cần đặt SSH_AUTH_SOCK trỏ đến 1Password socket path thủ công; tài liệu chính thức hướng dẫn chi tiết.

Điểm gây phiền toái:

  • DevContainers và WSL: Agent socket không tự động forward vào container. Bạn cần cầu nối socat hoặc CLI wrapper op ssh để expose agent bên trong container. Hãy kiểm tra điều này trước khi xóa disk key — test xác thực từ bên trong DevContainer trước.
  • Lỗi focus Touch ID: Trên macOS Sequoia, dialog Touch ID đôi khi không focus sau khi màn hình bị khóa. Cách giải quyết là click vào icon 1Password trên menu bar. Đây là lỗi đã biết.
  • Giới hạn sáu key ở server: Các server áp dụng MaxAuthTries 6 sẽ không thử key thứ bảy trở đi. Nếu vault của bạn có nhiều hơn sáu key, hãy chỉ định đúng key cho từng host trong ~/.ssh/config với IdentityFile.

Team và doanh nghiệp: Tính năng chia sẻ vault của 1Password xử lý deployment key. Đặt deploy key vào shared vault, và bất kỳ ai có quyền truy cập vault đều có thể dùng qua Touch ID của riêng họ. 1Password Business thêm SCIM, SSO, và Secrets Automation cho CI/CD pipeline. Ở mức $7.99/user/tháng (thanh toán năm), không phải rẻ — nhưng nó thay thế được workflow gửi file .pem qua email mà mọi team đều hối hận sau này.

Bitwarden SSH Agent

Bitwarden bổ sung hỗ trợ SSH agent trong v2025.1.2 (tháng 1 năm 2025). Tier miễn phí đã bao gồm tính năng này. Cách cài đặt tương tự 1Password: bật trong Bitwarden Settings → SSH Agent, trỏ IdentityAgent vào Bitwarden socket, thêm public key vào server.

Bitwarden chỉ tạo Ed25519 key. RSA import hoạt động, nhưng không thể tạo RSA trong vault. Với hầu hết lập trình viên, Ed25519 là lựa chọn mặc định đúng đắn.

Điểm còn thiếu: Khoảng cách không nằm ở tính năng mà ở kinh nghiệm có tài liệu. SSH agent của 1Password đã được kiểm chứng trong production từ 2022. Của Bitwarden mới ra từ tháng 1 năm 2025. Khi bạn gặp trường hợp lạ — DevContainer socket forwarding, shared vault key không xuất hiện trong agent, thiết lập WSL2 — câu trả lời trên StackOverflow và bài viết cộng đồng thưa thớt hơn nhiều so với 1Password.

Lưu ý quan trọng: Bitwarden cho macOS không có trên App Store. Hãy cài từ bitwarden.com hoặc qua Homebrew.

Ưu điểm của Bitwarden: Miễn phí. Nếu bạn là developer solo, không chia sẻ key với team, và $2.99/tháng là yếu tố quyết định — Bitwarden đáp ứng đủ nhu cầu.

Secretive

Secretive là ứng dụng macOS mã nguồn mở lưu SSH key trong Secure Enclave. Key là ECDSA 256-bit (P-256) — đây là giới hạn phần cứng của Secure Enclave, không phải lựa chọn của Secretive. Key không thể export, backup, hay chuyển sang máy khác.

Nếu bạn đổi Mac, bạn phải tạo lại key. Nếu Mac hỏng trước khi migrate, key đó mất vĩnh viễn. Mọi server và dịch vụ được ủy quyền cho key Secretive đều cần được ủy quyền lại từ đầu.

Nghe có vẻ là nhược điểm và thường là vậy. Ưu điểm: Secure Enclave thực thi điều này ở cấp phần cứng. Không process phần mềm nào chạy trên Mac của bạn có thể extract private key. Không malware, không kernel exploit, không root. Key chỉ tồn tại trong secure processor.

Trường hợp phù hợp với Secretive: Bạn chỉ dùng macOS, tự quản lý server của mình, không bao giờ chia sẻ key, và muốn đảm bảo phần cứng mạnh nhất có thể. Đây là trường hợp hẹp. Với hầu hết lập trình viên quản lý nhiều host qua cả hạ tầng cá nhân và công việc, sự đánh đổi về tính di động không xứng đáng.

Ghi chú về maintenance: Secretive v3.0.4 (tháng 11 năm 2025), được duy trì bởi một developer. Dự án vẫn active nhưng không phải sản phẩm của công ty.

Plain ssh-agent

ssh-agent được cài sẵn trên mọi máy macOS và Linux. Key không được mã hóa trong bộ nhớ khi agent đang chạy. Không có Touch ID, không xác nhận sinh trắc học, không thông báo khi key được dùng.

Agent forwarding (-A) phổ biến và tiềm ẩn rủi ro. Root trên remote host có thể sử dụng forwarded agent socket của bạn trong suốt session. Đây là kiểu tấn công đã được ghi nhận và đang bị khai thác trong thực tế — không phải lo ngại lý thuyết.

Lập luận cho plain ssh-agent: đơn giản. Không cần cài phần mềm thêm, không subscription, không daemon để debug. Một máy, một server, không team, không forwarding — hoàn toàn có thể chấp nhận được.

Nếu tiếp tục dùng plain ssh-agent, hãy dùng key mã hóa và lưu passphrase trong macOS Keychain:

ssh-keygen -t ed25519 -C "[email protected]"
# nhập passphrase mạnh khi được hỏi
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Cách này bảo vệ key lúc ở trạng thái nghỉ mà không khắc phục rủi ro agent forwarding.

So sánh tính năng

1PasswordBitwardenSecretivePlain
Tạo Ed25519❌ (P-256)
Import RSA
Touch ID mỗi lần dùng
Chia sẻ team✅ vault✅ vault
Đa nền tảngMac/Win/Linux¹Mac/Win/Linux¹Chỉ macOSTất cả
Git commit signing✅ op-ssh-sign✅ (thủ công)
Backup/di chuyển key✅ vault✅ vault❌ phần cứng✅ file
Chi phí$2.99+/thángMiễn phí–$10/nămMiễn phíMiễn phí

¹ Chỉ native package. Không phải Flatpak, Snap, hay Mac App Store (Bitwarden).

Kết luận

Developer solo trên macOS: 1Password SSH Agent ở mức $2.99/tháng (gói individual). Tài liệu tốt nhất, thiết lập git commit signing nhanh nhất, hoạt động trên cả Mac và Linux mà không cần thay đổi gì.

Team nhỏ có shared deployment key: 1Password Teams ở mức $7.99/user/tháng. Shared vault với Touch ID cho từng thành viên, audit log, không còn file key gửi qua email.

Developer solo cần tiết kiệm chi phí: Bitwarden tier miễn phí. Đáp ứng đủ nhu cầu. Kỳ vọng ít hỗ trợ cộng đồng hơn cho các edge case.

Chỉ dùng macOS, cần bảo mật phần cứng tối đa, không cần di chuyển key: Secretive. Trường hợp hẹp nhưng hoàn toàn hợp lý.

Một máy, không forwarding, không team: Plain ssh-agent với Ed25519 key mã hóa và passphrase lưu trong Keychain. Nâng cấp khi tình huống thay đổi.

Nếu bạn đang hoàn thiện toàn bộ môi trường terminal trên Mac, xem thêm Ghostty vs Warp để chọn terminal phù hợp với SSH workflow.

Cài đặt 1Password SSH Agent

  1. Trong 1Password: Settings → Developer → bật SSH Agent.
  2. Chỉnh sửa ~/.ssh/config:
Host *
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
  1. Trong 1Password: New Item → SSH Key → tạo Ed25519. Đặt tên theo mục đích xác thực (“GitHub”, “prod-bastion”).
  2. Để git commit signing: mở SSH key item trong 1Password → click “Configure Commit Signing.” 1Password sẽ tự động ghi các entry vào .gitconfig.
  3. Sao chép public key từ item và thêm vào GitHub trong Settings → SSH and GPG keys — một lần là Authentication Key, một lần là Signing Key.
  4. Test xác thực: ssh -T [email protected]. Prompt Touch ID của 1Password sẽ xuất hiện.

Với shared vault key (Teams): Key trong shared vault không tải mặc định. Chỉnh sửa ~/.config/1Password/ssh/agent.toml:

[[ssh-keys]]
vault = "Shared"

Nếu không có đoạn này, 1Password chỉ tải key từ Personal vault.

Chuyển key hiện có vào 1Password

1Password import định dạng OpenSSH, PKCS#8, và PKCS#1. Không import được file .ppk PuTTYgen hoặc key DSA/ECDSA. Hãy convert trước khi import, hoặc tiếp tục dùng key RSA hiện có.

Trình tự migrate an toàn:

# Xác nhận 1Password đang phục vụ key
ssh-add -l
# nên liệt kê key của bạn với nguồn là 1Password

# Thêm public key 1Password vào từng server
ssh-copy-id -i /path/to/1p-key.pub user@host1
ssh-copy-id -i /path/to/1p-key.pub user@host2

# Test từng host — prompt Touch ID sẽ xuất hiện
ssh user@host1
ssh user@host2

# Sau khi xác nhận mọi host hoạt động, xóa bản sao trên disk
rm ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub

Đừng xóa disk key cho đến khi đã test mọi host bạn quan tâm. Mười phút kiểm tra kỹ lưỡng còn hơn vài giờ khắc phục sự cố với một host bạn hiếm khi truy cập.

Lưu ý DevContainer: Cài đặt socat bridge hoặc CLI wrapper op ssh và test từ bên trong container trước khi xóa disk key. Môi trường container là nơi phổ biến nhất mà quá trình migrate thất bại mà không có cảnh báo rõ ràng.

Lưu ý

Bài viết này có affiliate link đến 1Password. Chúng tôi đã thử nghiệm sản phẩm một cách độc lập. Nếu Bitwarden là lựa chọn rõ ràng tốt hơn cho trường hợp sử dụng chính, chúng tôi đã giới thiệu Bitwarden — tier miễn phí thực sự tốt.

Chúng tôi không thử nghiệm 1Password trên Windows ngoài xác minh cơ bản. Vấn đề socket bridging cho DevContainer được tái hiện trên macOS Sequoia; hành vi trên Windows/Linux có thể khác.

SSH agent của Bitwarden chưa đầy hai năm tuổi tính đến thời điểm viết bài. Hành vi với các edge case có thể cải thiện đáng kể qua các bản cập nhật.

Tham khảo