Cách chuyển đổi các khóa bàn phím SSH được tạo bằng PuTTYgen (Windows) thành các cặp khóa được sử dụng bởi ssh-agent và Keychain (Linux)


464

Tôi đã tạo các cặp khóa bằng PuTTYgen và đang đăng nhập bằng Pagete, do đó tôi phải nhập cụm từ chỉ một lần khi hệ thống khởi động.

Làm thế nào để tôi đạt được điều này trong Linux? Tôi đã nghe nói keychainnhư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à thật tuyệt nếu tôi có thể kết nối liền mạch theo cách tương tự trong cả Windows và Linux.


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

17
Không, có - tôi biết rất nhiều 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 rõ ràng - xem câu trả lời chi tiết của Kaleb bên dưới.
TCSGrad

Câu trả lời:


714

puttygenhỗ trợ xuất khóa riêng của bạn sang đị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 chung.

  1. Mở PuttyGen
  2. Nhấp vào Tải
  3. Nạp khóa riêng của bạn
  4. Chuyển đến Conversions->Export OpenSSHvà xuất khóa riêng của bạn
  5. Sao chép khóa riêng của bạn vào ~/.ssh/id_dsa(hoặc id_rsa).
  6. Tạo phiên bản RFC 4716 của khóa chung bằng cách 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 chung sang định dạng OpenSSH:

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

Xem cái nàycái này để biết thêm thông tin.


12
Đối với những người gặp It is required that your private key files are NOT accessible by otherslỗi như tôi đã chạy cd ~/.sshchmod 700 id_rsa
chuyên gia

77
Ý bạn là chmod 600 id_rsa . Các tập tin không cần phải được thực thi. :)
sig11

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

2
Puttygen có thể được thực thi từ CLI không?
CMCDragonkai

20
Tôi giả sử đây là một cái gì đó mới, nhưng nếu bạn mở khóa riêng của mình trong puttygen, thì nó sẽ tự động hiển thị cho bạn một chuỗi khóa công khai, có thể sao chép, tương thích OpenSSH trong UI.
UpTheCux

161

Nếu tất cả những gì bạn có là một khóa công khai từ người dùng ở định dạng kiểu PuTTY, 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

Người giới thiệu

Bản sao bài viết

Tôi tiếp tục quên điều này vì vậy tôi sẽ viết nó ở đây. Không phải chuyên viên máy tính, cứ bước đi.

Cách phổ biến nhất để tạo khóa trên Windows là sử dụng Putty / Puttygen. Puttygen cung cấp một tiện ích gọn gàng để chuyển đổi khóa riêng của linux sang định dạng Putty. Tuy nhiên, điều không được giải quyết là khi bạn lưu khóa công khai bằng puttygen, nó sẽ không hoạt động trên máy chủ linux. Windows đặt một số dữ liệu trong các khu vực khác nhau và thêm ngắt dòng.

Giải pháp: Khi bạn đến màn hình khóa chung trong việc tạo cặp khóa của mình trong puttygen, hãy sao chép khóa chung và dán vào tệp văn bản có đuôi .pub. Bạn sẽ tiết kiệm cho bạn những giờ thất vọng khi đọc những bài viết như thế này.

TUY NHIÊN, sysadins, bạn luôn luôn nhận được tệp khóa rủng rỉnh không ném thông báo lỗi trong nhật ký xác thực ngoại trừ, không tìm thấy khóa, thử mật khẩu; mặc dù các khóa của mọi người đều hoạt động tốt và bạn đã gửi lại khóa này cho người dùng 15 lần.

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

Nên chuyển đổi khóa công khai puttygen hiện có sang định dạng OpenSSH.


2
Ngoài ra, bạn có thể muốn sao chép nhận xét của người dùng từ Comment:dòng và dán nó trên cùng dòng với khóa mới, được phân tá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

2
Điều này cho tôi một lỗi về:decode blob failed: invalid format
Chris Stryczynski

Nếu bạn đọc bài viết gốc, chi tiết chính là cách tiếp cận này chỉ hoạt động nếu bạn sao chép khóa từ puttygen khi đi qua UI của nó, nó sẽ không chuyển đổi một khóa đã được tạo từ các tệp do puttygen tạo ra.
slm

Tôi có thể sử dụng cùng một công cụ để chuyển đổi nó theo cách khác không?
Olle Härstedt

vâng, có vẻ như bạn đang nhìn vào: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik

148

Các phiên bản mới hơn của PuTTYgen (của tôi là 0,64) có thể hiển thị khóa công khai OpenSSH sẽ được dán trong hệ thống linux trong .ssh/authorized_keystệp, như được hiển thị trong hình ảnh sau:

nhập mô tả hình ảnh ở đây


7
Câu trả lời này bao gồm cách thiết lập xác thực khóa trên một điều khiển từ xa sử dụng định dạng OpenSSH. Nhưng để sử dụng khóa do Putty tạo trên máy khách 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ó hoạt động tuyệt vời.
dâu

52

Ngoài ra, nếu bạn muốn lấy các khóa riêng và khóa chung từ tệp khóa được định dạng PuTTY, bạn có thể sử dụng puttygentrên các hệ thống * nix. Đối với hầu hết các hệ thống dựa trên apt puttygenlà một phần của putty-toolsgói.

Xuất ra một khóa riêng từ một tệp khóa được tạo thành PuTTY:

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

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

$ puttygen keyfile.pem -L


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

2
OSX:brew install putty
Juha Palomäki

1
Điều đó nên được đảo ngược: puttygen inppk -O private-openssh -o outpemputtygen inppk -L(hoặc ssh-keygen -y -f outpem)
dave_thndry_085

27
sudo apt-get install putty

Điều này sẽ tự động cài đặt công cụ puttygen.

Bây giờ để chuyển đổi tệp PPK được sử dụng với lệnh SSH, hãy 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 qua SSH với:

ssh -v user@example.com -i my-openssh-key

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


Đ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
Martin Prikryl

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

TUYỆT QUÁ! Những công việc này. Ngoài ra, để cài đặt putty trên Macos: brew install putty
Dylan B

14

Gần đây tôi gặp vấn đề này khi tôi chuyển từ Putty cho Linux sang Remmina cho Linux. Vì vậy, tôi có rất nhiều tệp PPK cho Putty trong .puttythư mục của mình vì tôi đã sử dụng nó được 8 năm. Đối với điều này, tôi đã sử dụng một forlệnh đơn giản cho bash shell để thực hiện tất cả các tệp:

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 mức, đã hoàn thành công việc cho tất cả các tệp 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à hỏi mật khẩu cho khóa đó trước rồi tiếp tục.


2
Đối với những người lười biếng như tôi, đây là bản sao-dán để có được puttygen trên ubfox: sudo apt-get install putty-tools
Lennart Rolland

"Đơn giản" - Tôi ghét thấy phức tạp!
Alex Jansen

8

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

Mã thông báo: A.2.2


14
Thật không may, nó không phải là một tùy chọn nếu bạn có các khóa hiện có mà bạn phải sử dụng.
chuyên gia

6

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

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

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

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

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

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

Một bài viết web với nhiều chi tiết hơn có thể được tìm thấy ở đây


0

PPK → OpenSSH RSA với PuttyGen & Docker.

Khóa riêng:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

Khóa công khai:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

Xem thêm https://hub.docker.com/r/zinuzoid/puttygen

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.