Làm cách nào để thêm Khóa SSH vào tệp ủy quyền?


185

Tôi có một máy chủ Ubuntu trên Amazon EC2, mà tôi sử dụng để phát triển và hôm nay tôi đã ngu ngốc xóa mọi thứ trong ~/.ssh/authorized_keystệp của mình . May mắn thay, tôi đã mở SSH, vì vậy tôi vẫn kết nối và có thể sửa tệp, nhưng khi tôi cố gắng đặt lại tệp chính của mình, nó không hoạt động. Tôi vẫn nhận được sự cho phép từ máy chủ trên máy cục bộ của mình.

authorized_keyscó quyền 600. Tôi đã thử nối thêm khóa SSH của mình với ssh-rsa và tắt ssh-rsa. Tôi cũng đã thử tạo khóa SSH tất cả một dòng, nhưng nó cũng không hoạt động.

Có cái gì khác mà tôi phải làm như tải lại tập tin không?


3
Nhiều năm sau, điều này - dường như có liên quan & hoạt động; chỉ muốn thực hiện một quan sát, nói về việc đã tránh được một viên đạn: "May mắn thay tôi có một SSH mở, vì vậy tôi vẫn kết nối [..]" - sheesh! ; dP
Nostromov

1
Bài đăng này, được chỉnh sửa vào ngày sinh nhật của tôi, đã cứu tôi hai tháng trước vào ngày sinh nhật của tôi.
ytpillai

Câu trả lời:


198

Bạn không bao giờ nên lưu tệp với nội dung của nó bắt đầu bằng -----BEGIN RSA PRIVATE KEY-----máy chủ, đó là khóa riêng của bạn . Thay vào đó, bạn phải đặt công quan trọng vào ~/.ssh/authorized_keystập tin.

Đây công cộng quan trọng có .pubphần mở rộng khi được tạo ra sử dụng ssh-keygenvà nội dung của nó bắt đầu với ssh-rsa AAAAB3. (Định dạng nhị phân được mô tả trong các câu trả lời cho câu hỏi này ).

Quyền của ~/.sshmáy chủ phải là 700. Tệp ~/.ssh/authorized_keys(trên máy chủ) được cho là có chế độ 600. Quyền của khóa (riêng tư) ở phía máy khách phải là 600.

Nếu khóa riêng không được bảo vệ bằng mật khẩu và bạn đặt nó trên máy chủ, tôi khuyên bạn nên tạo một khóa mới:

ssh-keygen -t rsa

Bạn có thể bỏ qua điều này nếu bạn hoàn toàn chắc chắn rằng không ai có thể khôi phục khóa riêng đã bị xóa khỏi máy chủ.

Nếu điều này không có ích, hãy chạy sshvới các tùy chọn để có tính chi tiết hơn:

ssh -vvv user@example.com

Về phía máy chủ, bạn có thể xem lại /var/log/auth.logđể biết chi tiết.


1
Với máy chủ Amazon EC2, tất cả những gì tôi nhận được là khóa riêng (key.pem). Tôi không có khóa công khai ở bất cứ đâu.
Dave Long

3
@Dave Long: Bạn phải tạo khóa mới bằng cách sử dụng ssh-keygen -t rsavà đặt id_rsa.pubtệp vừa tạo ~/.ssh/authorized_keysvào máy chủ của mình. Xem thêm docs.amazonwebservice.com/AWSEC2/latest/UserGuide/iêu
Lekensteyn

15
@DaveLong: Bạn có thể tạo khóa chung từ khóa riêng bất cứ lúc nào. Bạn có thể thực hiện việc này một cách đơn giản với lệnh sau: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne

5
@MorganBlackthorne Trong khi đó là sự thật, tôi khuyên bạn nên tạo khóa riêng của bạn thay vì chấp nhận khóa từ các nguồn từ xa. Bạn không thể hoàn toàn chắc chắn rằng khóa riêng không bị rò rỉ.
Lekensteyn

2
@Gerrat Cố định².
Lekensteyn

175

Một cách khác để cài đặt khóa chung của bạn trong máy từ xa authorized_keys:

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

Một số ưu điểm:

  • không cần ssh-copy-idphải cài đặt

  • đảm bảo rằng mkdirhoạt động trước khi cố gắng để thêm id_rsa.pubvào authorized_keys.


10
Câu trả lời của bạn đã giúp tôi làm điều này trên nhiều máy từ xa mà không cần thêm gói nào, cảm ơn bạn.
nol

Điều này không đảm bảo rằng thư mục "~ / .ssh" và tệp "~ / .ssh / ủy quyền" sẽ được tạo với các quyền chính xác.
Nick

1
@Nick, tôi đã có vấn đề đó. Vì vậy, có lẽ trước tiên người ta phải thực sự kiểm tra sự tồn tại của chúng, nếu thiếu tạo đúng với chmod (700 / thư mục, 600 / tệp), và chỉ sau đó thêm? Vì vậy, có lẽ nó không thể là một lót?
AnneTheAgile

7
@AnneTheAgile Tôi nghĩ rằng việc thay đổi mkdir -p ~/.sshmột phần câu trả lời do @MariusButuc đưa ra umask 077 && mkdir -p ~/.sshlà tất cả những gì bạn cần làm để đảm bảo rằng nó sẽ hoạt động tốt.
Nick

1
ty @Nick! Tôi sẽ cho nó đi.
AnneTheAgile

128

Nếu bạn có xác thực dựa trên đăng nhập thì hãy sử dụng ssh-copy-idđể nối các khóa công khai của bạn vào máy chủ từ xa.

ssh-copy-id user@host

1
Đó dường như không phải là một lệnh hợp lệ trên Mac, đó là máy khách của tôi.
Dave Long


13
trên OSX, bạn có thể cài đặt với brew:brew install ssh-copy-id
phil

Trên Macports, lệnh này có thể được cài đặt bằng cách sử dụng sudo port install openssh +ssh_copy_id. Các +ssh_copy_idcài đặt openssh với biến thể ssh_copy_id.
Stefan Lasiewski

6
Lưu ý rằng các hướng dẫn trên phildawson.tumblr.com yêu cầu bạn cài đặt phần mềm không tin cậy, như root. Điều này khá nguy hiểm và là một cách tốt để bị hack, trừ khi bạn biết bạn có thể tin tưởng tác giả.
Stefan Lasiewski

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

Cách dễ nhất là sao chép và dán ...

Đầu tiên xem / sao chép nội dung của khóa công khai cục bộ của bạn, id_rsa.pubbao gồm cả "ssh-rsa" bắt đầu cho đến khi kết thúc bằng địa chỉ email của bạn:

cat ~/.ssh/id_rsa.pub

Sau đó chỉnh sửa authorized_keystrên máy chủ và dán nội dung trong bảng tạm của bạn bên dưới bất kỳ khóa nào khác trong tệp đó:

nano ~/.ssh/authorized_keys

Và lưu Ctl+O, thoát tệp Ctl+X, thoát phiên SSH exitvà thử đăng nhập lại để xác nhận nó hoạt động. Nếu nó không yêu cầu mật khẩu, nó đã hoạt động.


5

Tôi nghĩ rằng tôi có thể đóng góp cho vấn đề này vì đó là về các trường hợp AWS cụ thể và tất cả các câu trả lời chỉ coi vấn đề là vấn đề của Linux, như thể đó là một phần cứng. Điều đầu tiên bạn cần hiểu là bạn không bao giờ nên coi các trường hợp EC2 là phần cứng. Điều đó sẽ tạo ra nhiều công việc hơn cho bạn Hãy coi họ là không ổn định. Đó là rào cản lớn nhất mà tôi thấy mọi người gặp phải với AWS. Tạo một AMI của cá thể của bạn và đưa khóa bạn cần vào thể hiện mới. cloud-init sẽ chăm sóc nó cho bạn. Chi tiết hơn tất cả những gì bạn phải làm là sử dụng khóa công khai chính xác khi tạo phiên bản mới ra khỏi AMI của bản gốc. Nếu, giống như trong các nhận xét về câu trả lời được phê duyệt, bạn muốn tạo cặp khóa pub và pem của riêng mình, AWS cung cấp cho bạn tùy chọn tải lên các khóa công khai để sử dụng trong EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

Sau khi lưu khóa công khai, bạn nên lưu khóa riêng vào một thư mục và tệp trên máy tính của mình. Và trong phần xác thực của ssh trên putty, bạn nên trỏ đến tệp khóa riêng mà bạn đã lưu trên máy tính để bàn của mình. Nó sẽ làm việc. Nó làm việc cho tôi.


1
Tôi sẽ chỉ thích nó nếu bảng điều khiển windows có thể có tất cả các chức năng ssh được thêm vào trình thông dịch của nó
Dennis

2

Nhận một vỏ trên máy từ xa nơi bạn muốn đặt khóa và sau đó bạn có thể chạy lớp lót này để tạo các tệp và thư mục cần thiết, đặt quyền của chúng và nối thêm khóa vào tệp. Tất nhiên bạn phải thay đổi KEYGOESHEREphần bên dưới và bình luận sau nó.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

Đây là một biến thể theo đó bạn có thể có một danh sách các tên tệp khóa chung trong một tệp văn bản và một loạt các tệp khóa công khai lớn cũng nằm trong cùng một thư mục.

Biến thể này có thể hữu ích nếu bạn đưa ra một danh sách lớn các tệp khóa công khai để nhập :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
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.