Tôi sử dụng một giải pháp phức tạp hơn một chút nhưng rất linh hoạt vì tôi muốn duy trì sự tách biệt trong các khóa nhận dạng SSH được sử dụng cho các máy chủ mạng gia đình, máy chủ văn phòng, tư vấn máy chủ mạng khách hàng và các hệ thống khác mà tôi có tài khoản.
Bây giờ tôi nói rằng tôi làm việc từ các máy trạm Linux hầu như chỉ có một khóa USB được thiết lập bằng mã hóa LUKS và trình quản lý cửa sổ X11 của tôi cùng với trình nền HAL phát hiện ổ đĩa được mã hóa LUKS và nhắc nhở mật khẩu giải mã khi nó được chèn và cố gắng được gắn kết. Bằng cách lưu trữ cái này trên một ổ đĩa được mã hóa theo cách tôi không bao giờ lưu trữ các khóa SSH của mình trên bất kỳ máy trạm nào.
Sau đó tôi có cấu hình sau trong ~/.ssh/config
tệp của mình :
Host *
Protocol 2
IdentityFile %d/.ssh/keys.d/id_rsa.%l
IdentityFile %d/.ssh/keys.d/id_dsa.%l
IdentityFile %d/.ssh/keys.d/%u@%l
Các % d được dịch là thư mục home của người dùng bằng OpenSSH và trong ~ / .ssh thư mục Tôi đã tạo ra keys.d như một liên kết tượng trưng đến đường dẫn thư mục trên ổ đĩa USB được mã hóa khi nó được gắn đúng cách.
Các % l biểu được phiên dịch sang được các máy client địa phương hostname và % u sẽ được dịch sang tên cho khách hàng địa phương.
Cấu hình này làm gì là cho phép SSH tìm kiếm khóa bằng 3 biểu thức khác nhau. Ví dụ: nếu tên người dùng jdoe
của máy khách cục bộ của tôi là và tên máy khách cục bộ của tôi examplehost
thì nó sẽ tìm theo thứ tự sau cho đến khi tìm thấy khóa tồn tại và được máy chủ từ xa chấp nhận.
/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost
Thậm chí, bạn có thể sử dụng biểu thức % r để tìm khóa cụ thể cho tên người dùng máy chủ từ xa hoặc % h cho tên máy chủ của máy chủ từ xa giống như % u và % l đã được sử dụng.
Cập nhật: Bây giờ tôi thực sự sử dụng gpg-agent GnuPG với khả năng tương thích ssh-agent để chỉ đọc và sử dụng khóa xác thực từ thẻ thông minh OpenPGP v2 của tôi.