2010-02-08 33 views
366

Tôi đã tạo cặp khóa bằng cách sử dụng PuttyGen và đang đăng nhập bằng Pageant, để tôi phải nhập cụm từ mật khẩu chỉ một lần khi hệ thống của tôi khởi động.Cách chuyển đổi cặp khóa SSH được tạo bằng cách sử dụng PuttyGen (Windows) thành các cặp khóa được ssh-agent và KeyChain (Linux) sử dụng

Làm cách nào để đạt được điều này trong Linux? Tôi đã nghe nói về keychain nhưng tôi nghe nói rằng nó sử dụng một định dạng cặp khóa khác - tôi không muốn thay đổi các phím Windows của mình và nó sẽ rất tuyệt nếu tôi có thể kết nối liên tục theo cách tương tự trong cả Windows và Linux.

+0

Có shouldn Không có bất kỳ vấn đề bằng cách sử dụng các phím trong linux cũng ... chỉ cần sao chép chúng hơn và thêm các quán rượu để các phím ủy quyền ... mặc dù thừa nhận tôi không hoàn toàn hiểu câu hỏi của bạn. – ranman

+14

Không, tôi biết rất rõ rằng các định dạng chính được sử dụng bởi PuttyGen và ssh-agent là khác nhau, và chúng phải được chuyển đổi một cách rõ ràng - xem câu trả lời chi tiết của Kaleb bên dưới. – TCSGrad

Trả lời

574

puttygen hỗ trợ xuất khẩu khóa riêng của bạn đến một định dạng tương thích OpenSSH. Sau đó, bạn có thể sử dụng các công cụ OpenSSH để tạo lại khóa công khai.

  1. mở PuTTYgen
  2. Bấm tải
  3. Tải tin của bạn chính
  4. Đến Conversions->Export OpenSSH và xuất khẩu tư nhân chính
  5. Sao chép khóa riêng của bạn của bạn để ~/.ssh/id_dsa (hoặc id_rsa).
  6. Tạo phiên bản RFC 4716 của khóa công khai sử dụng ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub 
    
  7. Chuyển đổi phiên bản RFC 4716 của khóa công khai sang định dạng OpenSSH:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub 
    

Xem thisthis để biết thêm thông tin.

+9

Đối với những người nhận được 'Nó là cần thiết rằng các tập tin khóa riêng của bạn là không thể truy cập bởi những người khác' lỗi như tôi đã chạy' cd ~/.ssh' và 'chmod 700 id_rsa' – expert

+47

Bạn có nghĩa là ** chmod 600 id_rsa **. Tệp không cần phải thực thi được. :) – sig11

+1

Câu trả lời này là chìa khóa để lấy ssh từ cửa sổ dòng lệnh bằng cách sử dụng các phím không dùng mật khẩu cho tôi (đặc biệt cho truy cập git). Có thể đã cứu tôi * giờ * đau nếu tôi đã nhìn thấy nó trước đó! Cảm ơn! – cori

8

Nó có thể dễ dàng hơn để tạo các khóa của bạn dưới Linux và sử dụng PuTTYgen để chuyển đổi các khóa sang định dạng PuTTY.

PuTTY Faq: A.2.2

+14

Rất tiếc, đây không phải là tùy chọn nếu bạn có các khóa hiện có mà bạn phải sử dụng. – expert

126

Nếu tất cả các bạn có là một khóa công khai từ một người dùng ở định dạng PuTTY-phong cách, bạn có thể chuyển đổi nó sang định dạng openssh tiêu chuẩn như vậy:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub 

Nguồn: http://www.treslervania.com/node/408

+4

vì treslervania.com không còn phục vụ blog nữa, đây là cách quay lại bản sao của máy: https://web.archive.org/web/20120414040727/http://www.treslervania.com/node/408 –

+2

Ngoài ra, bạn có thể muốn sao chép nhận xét của người dùng từ dòng 'Nhận xét:' và dán vào cùng dòng với khóa mới, được phân cách bằng dấu cách. Tôi không biết tại sao ssh-keygen sẽ không làm điều này theo mặc định. – Tobia

+0

Điều này mang lại cho tôi một lỗi: 'giải mã blob không thành công: định dạng không hợp lệ ' –

6

Tôi nghĩ rằng những gì TCSgrad đã cố gắng hỏi (một vài năm trước) là làm thế nào để làm cho Linux hoạt động giống như máy Windows của mình. Đó là, có một tác nhân (pageant) có chứa một bản sao đã được giải mã của khóa riêng để cụm từ mật khẩu chỉ cần được đặt trong một lần. Sau đó, trình khách ssh, putty, có thể đăng nhập vào các máy nơi khóa công khai của anh ta được liệt kê là "được ủy quyền" mà không có lời nhắc mật khẩu.

Tương tự cho điều này là Linux, hoạt động như một khách hàng ssh, có một tác nhân giữ khóa riêng đã được giải mã để khi TCSgrad nhập "ssh host" lệnh ssh sẽ nhận khóa riêng của mình và không được nhắc cho một mật khẩu. host sẽ, tất nhiên, phải giữ khóa công khai trong ~/.ssh/authorized_keys.

Linux analog để kịch bản này được thực hiện sử dụng ssh-agent (các cuộc thi tương tự) và ssh-add (tương tự để thêm một khóa bí mật để Pageant).

Phương pháp làm việc cho tôi là sử dụng: $ ssh-agent $ SHELL $ SHELL đó là ma thuật tôi cần để làm đại lý chạy và tiếp tục chạy. Tôi thấy rằng ở đâu đó trên 'lưới và nó đã kết thúc một vài giờ đập đầu tôi vào tường.

Bây giờ chúng tôi có tương tự của cuộc thi chạy, một tác nhân không có khóa được tải.

Nhập $ ssh-thêm tự nó sẽ thêm (theo mặc định) các khóa cá nhân được liệt kê trong các tệp nhận dạng mặc định trong ~/.ssh.

Một bài báo trên web với rất nhiều chi tiết có thể được tìm thấy here

41

Hoặc nếu bạn muốn lấy các phím tư nhân và công cộng từ một tập tin quan trọng PuTTY formated bạn có thể sử dụng puttygen trên hệ thống * nix. Đối với hầu hết các hệ thống dựa trên apt puttygen là một phần của gói putty-tools.

Xuất ra một khóa bí mật từ một keyfile PuTTY formated:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

Đối với khóa công khai:

$ puttygen keyfile.pem -L

+0

Nếu vì lý do nào đó, bạn PHẢI thực hiện điều này trên hộp Windows (không thể chuyển tất cả khóa thành * nix một cách an toàn) và có nhiều khóa bằng GUI cồng kềnh, hãy thử biên dịch mã nguồn Unix dưới Cygwin. Đó puttygen.exe sẽ cung cấp cho bạn CLI "chế độ hàng loạt" như mô tả ở trên. –

+2

OSX: 'brew install putty' –

+0

Điều đó sẽ được đảo ngược:' puttygen inppk -O riêng-openssh -o outpem' và 'puttygen inppk -L' (hoặc' ssh-keygen -y -f outpem') –

12

Gần đây tôi có vấn đề này như tôi đã di chuyển từ Putty cho Linux cho Remmina cho Linux. Vì vậy, tôi có rất nhiều tệp PPK cho Putty trong thư mục .putty của tôi vì tôi đã sử dụng nó trong 8 năm. Đối với điều này tôi đã sử dụng một for lệnh đơn giản cho vỏ bash để làm tất cả các file:

cd ~/.putty 
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done; 

Rất nhanh chóng và đến thời điểm này, đã hoàn thành công việc cho tất cả các file mà putty có. Nếu nó tìm thấy một khóa có mật khẩu, nó sẽ dừng lại và yêu cầu mật khẩu cho khóa đó trước rồi tiếp tục.

+2

Đối với ppl lười biếng như tôi, ở đây là copy-paste để có được puttygen trên ubuntu: sudo apt-get install putty-tools –

110

các phiên bản mới hơn của PuTTYgen (tôi là 0,64) có thể hiển thị các khóa công khai OpenSSH để được dán trong hệ thống Linux trong file .ssh/authorized_keys, như thể hiện trong hình dưới đây:

enter image description here

+8

Đúng vậy! Đây là cách nhanh nhất và dễ nhất :) – LihO

+3

Đây sẽ là câu trả lời hàng đầu hiện nay. –

+4

Câu trả lời này bao gồm cách thiết lập xác thực khóa trên điều khiển từ xa sử dụng định dạng OpenSSH. Nhưng để sử dụng khóa được tạo bởi Putty trên máy khách * * của Linux, câu trả lời này là không đủ. Tôi đã làm theo câu trả lời được chấp nhận và nó đã làm việc lộng lẫy. – wberry

8
sudo apt-get install putty 

Thao tác này sẽ tự động cài đặt công cụ puttygen.

Bây giờ để chuyển đổi các tập tin PPK được sử dụng với lệnh SSH thực hiện như sau trong terminal

puttygen mykey.ppk -O private-openssh -o my-openssh-key 

Sau đó, bạn có thể kết nối thông qua SSH với:

ssh -v [email protected] -i my-openssh-key 

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603

+0

Điều này không thực sự hiển thị nhiều hơn, những gì đã có trong [câu trả lời của @John Jawed] (http://stackoverflow.com/a/16548452/850848) –

+0

Các đối số giải thích những gì chúng đại diện. +1 – danronmoon

Các vấn đề liên quan