Cách dễ nhất để sao chép khóa ssh sang máy khác?


342

Tôi lười biếng ở nhà và sử dụng xác thực mật khẩu cho các máy gia đình của tôi. Tôi đã sẵn sàng để chuyển sang xác thực dựa trên khóa. Có rất nhiều tùy chọn trên web về cách thực hiện việc này, bao gồm cả việc định vị sau đó sshing phím, quét trực tiếp phím, v.v.

Tôi đang tìm cách dễ nhất và được khuyến nghị để sao chép khóa, hy vọng có một trình bao bọc tiện lợi ở đâu đó trong gói ssh Ubuntu?

Tôi đã biết làm thế nào để tắt đăng nhập mật khẩu .


Câu trả lời:


463

Các ssh-copy-idlệnh (trong openssh-client gói và cài đặt theo mặc định) không chính xác này:

ssh-copy-id user@hostname.example.com

sao chép khóa chung của danh tính mặc định của bạn (sử dụng -i identity_filecho các danh tính khác) vào máy chủ từ xa.

Danh tính mặc định là khóa ssh "tiêu chuẩn" của bạn. Nó bao gồm hai tập tin (khóa công khai và tư nhân) trong của bạn ~/.sshthư mục, thường được đặt tên identity, id_rsa, id_dsa, id_ecdsahoặc id_ed25519(và cùng với .pub), tùy thuộc vào loại quan trọng. Nếu bạn không tạo nhiều hơn một khóa ssh, bạn không phải lo lắng về việc chỉ định danh tính, ssh-copy-id sẽ tự động chọn nó.

Trong trường hợp bạn không có danh tính, bạn có thể tạo một danh tính bằng công cụ ssh-keygen.

Ngoài ra, nếu máy chủ sử dụng một cổng khác với cổng mặc định ( 22), bạn nên sử dụng dấu ngoặc kép theo cách này ( nguồn ):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
Danh tính mặc định là gì?
Oxwivi

17
đối với các cổng khác nhau, hãy sử dụng cổng này:ssh-copy-id "user@host -p 6842"
jibon57

5
Điều gì xảy ra nếu máy chủ từ xa bạn đang sao chép không cho phép nhắc mật khẩu và về cơ bản bị khóa lưu để truy cập SSH?
Cyle

10
Trên mac bạn có thể làm brew install ssh-copy-idvà sau đó chạy lệnh.
Avishai

1
@MarcelStimberg vui lòng cập nhật câu trả lời để bao gồm hồ sơ -i; mọi người có thể có nhiều hơn 1 khóa và đẩy tất cả hoặc phải tìm kiếm tùy chọn -i trong các nhận xét
Nick

129

Tôi thích câu trả lời từ Marcel. Tôi không biết lệnh này. Tôi đã luôn sử dụng những gì tôi đã tìm thấy trên trang web của Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Tôi nghĩ rằng vẫn đăng nó ở đây, bởi vì nó là một minh họa tốt về những gì có thể đạt được trong mã shell với sức mạnh của ssh. Nhưng sử dụng chắc chắn ssh-copy-idlà một cách an toàn hơn để làm điều đó đúng cách!

Lưu ý rằng nếu thư mục .sshchưa tồn tại, lệnh trên sẽ thất bại. Ngoài ra, có thể tốt hơn khi tạo tệp để đặt quyền tối thiểu có thể (về cơ bản chỉ đọc-ghi cho chủ sở hữu). Đây là một lệnh nâng cao hơn:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

2
Lệnh chính xác này cũng hoạt động từ máy Mac
Mihai P.

Nó nên hoạt động dưới bất kỳ Unix nào với hầu hết shell. Tôi đã cập nhật bài viết bằng một lệnh cập nhật trong trường hợp thư mục .sshkhông tồn tại ở phía xa.
Huygens

1
Các catlà không cần thiết - một chuyển hướng đầu vào bình thường là đủ, ví dụ như< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig

@Huygens Cảm ơn. Hữu ích hơn để ghi nhớ điều này, bởi vì bạn không cần phải cài đặt bất cứ thứ gì và nó cũng có thể tốt cho việc thực thi các lệnh nước ngoài, ví dụ như thay đổi quyền phía máy chủ như bạn đã trình bày trong ví dụ nâng cao của mình.
Jonathan Komar

2
Tôi rất thích cách này vì nó cho phép bạn sử dụng sbo verbose rất hữu ích trong việc tìm ra lý do tại sao mọi thứ bị hỏng. sshcopyid chỉ đóng băng và không bao giờ hoạt động, điều này đã diễn ra hoàn hảo.
Còi báo

31

Phương pháp đồ họa

  1. Mở ứng dụngMật khẩu và phímMy Phím cá nhân .
  2. Chọn chìa khóa của bạn và sau đó nhấp vào từ xaCấu hình chính cho Secure Shell .

Thiết lập máy tính để kết nối SSH


Tôi không có "Mật khẩu và Khóa mã hóa" trong menu.
Jorge Castro

Bạn đang sử dụng bản phát hành Ubuntu nào? Trong Ubuntu 10.04 LTS, điều này nên có sẵn theo mặc định.
ændrük

10.10, chỉ cần thêm thẻ. Câu trả lời của Marcel là những gì tôi đang tìm kiếm, mặc dù +1 cho câu trả lời theo định hướng máy tính để bàn của bạn!
Jorge Castro

4
Chương trình này là seahorse.
Gilles

1
Tôi nghĩ ứng dụng này nằm trong menu System-> Preferences trong 10.10 (không thể kiểm tra ngay bây giờ, tôi vào ngày 10.04)
Huygens

18

Trên Ubuntu, bạn có thể tìm nạp các khóa từ Launchpad:

ssh-import-id [launchpad account name]

Chi tiết :

  1. Bạn cần có tài khoản Launchpad để đăng nhập hoặc tạo tài khoản
  2. Sau khi đăng nhập, nhấp vào nút bên cạnh các khóa SSH:
  3. Dán nội dung của tệp khóa công khai của bạn vào trường đó (bao gồm cả nhận xét). Một chìa khóa như vậy trông giống như:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Ở đây, ssh-rsachỉ ra rằng khóa là khóa RSA, AAAAB3Nza .... UyDOFDqJplà khóa thực tế và lekensteynlà nhận xét.

  4. Lưu khóa bằng cách nhấn Nhập khóa công khai
  5. Nếu mọi thứ diễn ra tốt đẹp, chìa khóa của bạn bây giờ sẽ được liệt kê dưới phím SSH:

Gói ssh-import-idcần phải được cài đặt trên máy cần được truy cập từ xa. Gói này được cài đặt cùng với openssh-servergói vì đây là gói được khuyến nghị openssh-server. Sau khi chắc chắn rằng ssh-import-idđã được cài đặt Trên máy khách, hãy chạy:

ssh-import-id [launchpad account name]

Điều này sẽ tải xuống khóa chung từ các máy chủ Launchpad qua HTTPS để bảo vệ bạn khỏi các cuộc tấn công MITM.

Trên Ubuntu Lucid và trước đó, bạn có thể thực hiện tương tự với:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

Các echolệnh là cần thiết để có được một newline thêm sau khi phù hợp với chìa khóa SSH.


14

cho cổng tùy chỉnh

ssh-copy-id -i "user@hostname.example.com -p2222"

-i chuyển mặc định thành ~ / .ssh / id_rsa.pub, nếu bạn muốn một khóa khác, hãy đặt đường dẫn của khóa sau -i

CẢNH BÁO: Nếu bạn không viết -i, nó sẽ sao chép tất cả các khóa của bạn được tìm thấy trong ~ / .ssh


1
Bạn có chắc chắn về CẢNH BÁO đó không? "-I id_file - Chỉ sử dụng (các) khóa có trong id_file (thay vì tìm kiếm danh tính qua ssh-add (1) hoặc trong default_ID_file). Nếu tên tệp không kết thúc bằng .pub được bỏ qua, default_ID_file được sử dụng. "
Yousha Aleayoub

0

ssh-copy-idlàm chính xác điều đó. Tôi không chắc tại sao một số câu trả lời khác ở đây thêm thông tin không chính xác. Sự giúp đỡ cho thấy như sau:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Tôi vừa thử ứng dụng sau trên máy khách Ubuntu 18.04 với máy chủ CentOS 7.6 và nó hoạt động như một bùa mê. Ví dụ hiển thị sử dụng cổng tùy chỉnh 2222và chỉ định khóa chung tại~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

Trước khi chạy lệnh, tôi thực sự đã sử dụng công -ntắc ở cuối để thực hiện chạy khô xác nhận rằng lệnh sẽ hoạt động như dự định. Khi tôi xác nhận nó, tôi chạy lại lệnh như trên, không có công -ntắc.

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.