Khóa ssh có cần được đặt tên id_rsa không?


130

Tôi đã gặp vấn đề này một vài lần khi tạo các máy chủ xây dựng với xác thực có khóa.

Tôi đã tự hỏi nếu có ai khác có kinh nghiệm này. Tôi có một vài khóa cho người dùng hiện tại của tôi có thể kết nối với các máy khác nhau. Giả sử máy1 và máy2. Tôi đã dán khóa công khai của mình vào tệp ủy quyền tương ứng của họ. Cái đầu tiên tôi đã đặt tên cho khóa đầu tiên id_rsa và khóa thứ hai.

Khi tôi cố gắng kết nối với bender, tôi nhận được kết quả đầu ra với kết nối ssh dài dòng của mình

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Nó chỉ cung cấp khóa id_rsa, như bạn có thể thấy ở trên. Điều này có đúng không? Nếu vậy tại sao? Làm thế nào để tôi có được nó để cung cấp nhiều chìa khóa? Tôi biết đó là một vấn đề tôi thấy không liên tục, bởi vì ở nhà tôi có nhiều chìa khóa mà không gặp nhiều rắc rối.

Tôi cũng sẽ đánh giá cao một cái nhìn tổng quan về cách quán rượu và khóa riêng tương tác với máy khách và máy chủ. Tôi nghĩ rằng tôi đã có một ý tưởng khá tốt, nhưng rõ ràng tôi đang thiếu một cái gì đó.

Xin vui lòng và cảm ơn bạn.

Câu trả lời:


157

Theo mặc định, ssh tìm kiếm id_dsaid_rsatập tin. Các khóa không phải được đặt tên như thế này, bạn cũng có thể đặt tên cho nó mykeyhoặc thậm chí đặt nó trong một thư mục khác. Tuy nhiên, nếu bạn làm một trong những điều đó, thì bạn cần tham chiếu rõ ràng khóa trong lệnh ssh như vậy:

ssh user@server -i /path/to/mykey

Nếu một lệnh không chấp nhận -i, ví dụ sshfs, sử dụng IdentityFiletùy chọn:

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

Làm thế nào nó hoạt động

Khi tạo khóa, bạn sẽ nhận được hai tệp: id_rsa(khóa riêng) và id_rsa.pub(khóa chung). Như tên của họ cho thấy, khóa riêng nên được giữ bí mật và khóa chung có thể được công bố cho công chúng.

Xác thực khóa công khai hoạt động với khóa chung và khóa riêng. Cả máy khách và máy chủ đều có khóa riêng. Khi cài đặt openssh-servermáy chủ, khóa riêng và khóa riêng được tạo tự động. Đối với khách hàng, bạn sẽ phải tự làm điều đó.

Khi bạn (khách hàng) kết nối với máy chủ, các khóa công khai sẽ được trao đổi. Bạn sẽ nhận được một máy chủ và máy chủ của bạn. Lần đầu tiên bạn nhận được khóa công khai của máy chủ, bạn sẽ được yêu cầu chấp nhận nó. Nếu khóa công khai này thay đổi theo thời gian, bạn sẽ được cảnh báo vì một cuộc tấn công MITM (Người đứng giữa) có thể đang diễn ra, chặn giao thông giữa máy khách và máy chủ.

Máy chủ kiểm tra xem bạn có được phép kết nối (được xác định trong /etc/ssh/sshd_config) không và liệu khóa chung của bạn có được liệt kê trong ~/.ssh/authorized_keystệp không. Lý do có thể khiến khóa công khai bị từ chối:

  • /etc/ssh/sshd_config:
    • AllowUsershoặc AllowGroupsđược chỉ định, nhưng người dùng máy chủ của bạn không được liệt kê trong danh sách nhóm hoặc người dùng (mặc định không được xác định, không hạn chế người dùng hoặc nhóm đăng nhập).
    • DenyUsershoặc DenyGroupsđược chỉ định và bạn nằm trong danh sách người dùng hoặc nhóm.
    • Bạn đang cố gắng đăng nhập bằng root, nhưng PermitRootLoginđược đặt thành No(mặc định yes).
    • PubkeyAuthenticationđược đặt thành No(mặc định yes).
    • AuthorizedKeysFileđược đặt ở một vị trí khác và các khóa chung không được thêm vào tệp đó (mặc định .ssh/authorized_keys, liên quan đến thư mục gốc)
  • ~/.ssh/authorized_keys: khóa công khai của bạn không được thêm vào trong tệp này (lưu ý rằng tệp này được đọc là người dùng root)

Sử dụng nhiều phím

Không có gì lạ khi sử dụng nhiều khóa. Thay vì chạy ssh user@host -i /path/to/identity_file, bạn có thể sử dụng tệp cấu hình , ~/.ssh/config.

Các cài đặt phổ biến là IdentityFile (các phím) và cổng. Cấu hình tiếp theo sẽ chỉ kiểm tra "id_dsa" và "bender" khi kết nối với ssh youruser@yourhost:

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Nếu bạn bỏ qua Host yourhost, cài đặt sẽ áp dụng cho tất cả các kết nối SSH. Các tùy chọn khác cũng có thể được chỉ định cho phù hợp với máy chủ này, như User youruser, Port 2222, vv Điều này sẽ cho phép bạn để kết nối với tốc ký ssh yourhostthay ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender.


1
Tại sao tôi cần chỉ định khóa? toàn bộ vấn đề là để tôi có thể ssh vào máy dễ dàng hơn.
myusuf3

2
@StevenRoose từ ssh_config(5): Tên tệp có thể sử dụng cú pháp dấu ngã để chỉ thư mục chính của người dùng hoặc một trong các ký tự thoát sau: '% d' (thư mục chính của người dùng cục bộ), '% u' (tên người dùng cục bộ), '% l '(tên máy chủ cục bộ),'% h '(tên máy chủ từ xa) hoặc'% r '(tên người dùng từ xa). Tôi không thể chỉ định thẻ hoang dã, nhưng điều này sẽ đủ thuận tiện tôi đoán. Xin lưu ý rằng một máy chủ phải thăm dò từng khóa bạn đã gửi, vì vậy chỉ định ít khóa hơn sẽ tốt hơn. Ký tự đại diện trên máy chủ lưu trữ, xem lại trang hướng dẫn của ssh_config(5).
Lekensteyn

2
@therobyouledge Bạn không phải tạo một cặp khóa duy nhất cho mọi máy. Thông thường, bạn có một vài khóa và nối thêm khóa chung của một trong các khóa vào .ssh/authorized_keystệp trên các máy từ xa. Nếu bạn sử dụng .ssh/id_rsatên tệp tiêu chuẩn (hoặc id_dsa, id_ecdsa hoặc id_ed25519 gần đây), thì ssh sẽ tự động thử điều này và bạn không cần chỉ định IdentityFiletrong cấu hình của mình (hoặc -i path/to/id_filetham số cho ssh).
Lekensteyn

4
Tôi thích câu trả lời vượt ra ngoài chi tiết cần thiết và dành thời gian để giải thích khái niệm này. Công việc tuyệt vời! +1
user2490003

1
@landed Đây là máy chủ của máy chủ SSH (có thể là địa chỉ IP hoặc tên DNS). Tôi đã cố gắng làm rõ phần đó, hy vọng nó sẽ giúp.
Lekensteyn

40

Phương pháp yêu thích của tôi cho phép khóa riêng được chọn tự động

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH sẽ thay thế% l bằng tên máy cục bộ,% r bằng tên người dùng từ xa và% h bằng máy chủ từ xa, do đó, nếu tôi muốn kết nối từ máy của mình được gọi là foo sang bar với tư cách là người dùng, tôi chạy:

ssh bar

Và ssh sẽ tự động sử dụng:

~/.ssh/foo_user@bar_id_rsa

Vì máy chủ lưu trữ cục bộ cũng được lưu trữ, điều này cho phép các thư mục chính được chia sẻ qua NFS (khóa khác nhau trên mỗi máy!) Hoặc thậm chí xác định máy nào có nghĩa là khóa được bật ...


1

Khi xem xét nhận xét của StevenRoose rằng cần nhiều thời gian hơn để chỉ định nhiều khóa và tôi tình cờ chơi với rất nhiều phím, tôi muốn đề xuất giải pháp cá nhân của tôi.

Tôi tạo một liên kết tượng trưng đến khóa mà tôi muốn sử dụng vào thời điểm đó và vì điều đó chỉ thay đổi không thường xuyên tùy thuộc vào dự án nào tôi đang làm việc, tôi hài lòng với nó.

Ở đây tôi đã liên kết với các khóa của mình cho các máy chạy trong hộp ảo:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

Người ta cũng có thể thêm một tập lệnh thực sự nhanh chóng để thay đổi tập khác mà không cần phải gõ lại lệnh ln .

Một lần nữa, đây không phải là giải pháp cho hai khóa, nhưng với số lượng lớn hơn, nó có thể hoạt động được.


1
Tôi chỉ cần thêm một bí danh bằng bash_profile cho mỗi máy chủ mà tôi làm việc cùng. Vì vậy, đối với một máy chủ có tên là bob, tôi chỉ có ... alias bob = "ssh bob.example.com -l pete -i / path / to / key" - sau đó tôi chỉ cần gõ bob - và tôi vào!
Peter Bagnall

2
Mặc dù đôi khi dễ dàng hơn để "hoàn thành công việc theo cách bạn đã biết", có những cách tiếp cận dễ dàng hơn nếu bạn thiết lập các phím và máy chủ .ssh / configs. Nhận xét này được hướng vào cả người đăng bình luận và người bình luận @ Peter-Bagnall
Scott Prive
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.