Câu hỏi Làm thế nào để sử dụng Mac OS X Keychain với các khóa SSH?


Tôi hiểu rằng kể từ Mac OS X Leopard Keychain đã hỗ trợ lưu trữ các khóa SSH. Ai đó có thể vui lòng giải thích cách tính năng này được cho là hoạt động.

Tôi có một số khóa RSA mà tôi đã tạo trong thư mục ~ / .ssh của mình để truy cập vào các máy chủ khác nhau. Tôi không có cụm từ mật khẩu được đặt trên các khóa đó. Hiện tại để đăng nhập vào các máy chủ đó, tôi sử dụng các lệnh sau trong Terminal:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
người dùng ssh @ server

(Tôi đã viết một số hàm Bash để làm việc này dễ dàng hơn.)

Có cách nào tốt hơn để làm điều này bằng cách sử dụng Keychain?


133
2017-12-28 12:08


gốc




Các câu trả lời:


Để nó hoạt động, $SSH_AUTH_SOCK biến môi trường nên được trỏ đến /tmp/launch-xxxxxx/Listeners. Đây là nghĩa vụ phải được thực hiện tự động khi bạn đăng nhập. Người nghe trên ổ cắm đó nói giao thức ssh-agent.

Các tập lệnh bash của bạn đang bắt đầu tác nhân ssh của riêng bạn (viết chính tả ssh-agent, không ssh_agent) và ghi đè hiện tại ssh-agent được thiết lập cho bạn khi đăng nhập.

Ngoài ra, toàn bộ điểm của keychain là lưu trữ mật khẩu vào các khóa ssh của bạn, nhưng bạn nói rằng bạn không có cụm mật khẩu được đặt trên các khóa đó, vì vậy tôi không chắc bạn đang mong đợi gì từ việc tích hợp chuỗi.

Cuối cùng, khi bạn đăng nhập lần đầu, bạn có thể sẽ không thấy quá trình ssh-agent. Quá trình đó sẽ được khởi động tự động bằng các dịch vụ khởi chạy lần đầu tiên một cái gì đó cố gắng đọc ổ cắm đó /tmp.


16
2017-12-28 17:37



Cảm ơn. Vì vậy, tôi vẫn sẽ phải chạy ssh-add thế nào để thêm bản sắc RSA của tôi vào đại lý ssh mặc định bắt đầu khi đăng nhập? - John Topley
Bạn không phải chạy ssh-add; ssh-agent sẽ yêu cầu mật khẩu của khóa lần đầu tiên bạn chạy ssh. - Rudedog
Nó nhắc tôi mật khẩu mỗi khi tôi chạy ssh. Vấn đề là tôi không muốn phải nhập bất kỳ mật khẩu nào. - John Topley
Điều gì đang nhắc bạn nhập mật khẩu? Tôi bắt đầu nghi ngờ rằng đó là máy chủ từ xa đang nhắc bạn, trong đó đặt tuyên bố của bạn rằng các phím của bạn không có mật khẩu trong quan điểm tốt hơn. Nếu bạn muốn bỏ qua mật khẩu trên máy chủ từ xa, bạn cần phải thêm khóa công khai của mình vào $HOME/.ssh/authorized_keys trên máy chủ đó. Mac OS 'ssh-agent + keychain chỉ được sử dụng để lưu trữ cụm mật khẩu cho các khóa ssh cục bộ của bạn; nó không có nghĩa là gửi mật khẩu từ xa qua các kết nối ssh hiện có. - Rudedog
sử dụng ssh -v để chẩn đoán những gì ssh đang làm. cũng sử dụng sshd -p 8900 -v ở phía máy chủ và ssh -v remote:8900 để chẩn đoán những gì sshd đang làm. - Rudedog


Khi phát hành Leopard của OS X, ssh-agent được tích hợp chặt chẽ hơn với Keychain. Có thể lưu trữ mật khẩu của tất cả các khóa SSH của bạn một cách an toàn trong Keychain, từ đó ssh-agent sẽ đọc chúng khi khởi động. Điểm mấu chốt là nó rất đơn giản để bảo vệ các khóa của bạn bằng mật khẩu, nhưng không bao giờ phải gõ cụm mật khẩu để sử dụng chúng! Dưới đây là cách thực hiện:

Thêm cụm từ mật khẩu vào mỗi khóa ssh để móc khóa: (tùy chọn -k chỉ tải các khóa riêng tư, bỏ qua chứng chỉ)

ssh-add -K [path/to/private SSH key]

(lưu ý đó là thủ đô K)

Bất cứ khi nào bạn khởi động lại máy Mac, tất cả các khóa SSH trong keychain của bạn sẽ được tải tự động. Bạn sẽ có thể thấy các phím trong ứng dụng Keychain Access, cũng như từ dòng lệnh thông qua:

ssh-add -l

242
2018-04-11 19:58



Đây sẽ là câu trả lời được chấp nhận. - Kris
câu trả lời được chấp nhận trả lời câu hỏi của người dùng cụ thể này, nhưng câu trả lời này trả lời câu hỏi của người dùng chung - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/…  Bạn cũng cần tùy chọn -K để lưu trữ mật khẩu trong keychain. - Neeme Praks
Nếu bạn đã cài đặt một phiên bản SSH khác thông qua một hệ thống gói như Homebrew, thì cần phải sử dụng một đường dẫn tuyệt đối như /usr/bin/ssh-add. - Ludovic Kuty
Đối với macOS Sierra, mọi thứ đã thay đổi. Xem github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


Kể từ macOS Sierra, ssh-agent không còn tự động tải các khóa ssh được tải trước đó khi bạn đăng nhập vào tài khoản của mình. Đây là cố ý trên Apple một phần, họ muốn sắp xếp lại với dòng chính OpenSSH thực hiện. [1]


Như đã giải thích đây, đây là phương pháp được đề xuất từ macOS 10.12.2:

  1. Thêm các dòng sau vào ~/.ssh/config tập tin:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Bất kỳ khóa nào bạn thêm vào ssh-agent sử dụng ssh-add /path/to/your/private/key/id_rsa lệnh sẽ được tự động thêm vào keychain và phải được tự động tải khi khởi động lại.


Thông tin sau không được chấp nhận (lưu giữ để tham khảo).

Để quay trở lại hành vi trước đó, bạn muốn chạy ssh-add -A lệnh (tự động tải tất cả các khóa ssh có cụm từ mật khẩu trên keychain của bạn) khi bạn đăng nhập. Để thực hiện điều đó, hãy làm theo các bước sau:

  1. Trước tiên, thêm tất cả các phím bạn muốn tự động tải vào ssh-agent sử dụng ssh-add -K /absolute/path/to/your/private/key/id_rsa chỉ huy. Các -K đối số đảm bảo rằng cụm từ mật khẩu chính được thêm vào keychain của macOS. Đảm bảo bạn sử dụng đường dẫn tuyệt đối cho khóa. Sử dụng đường dẫn tương đối sẽ làm cho tập lệnh tự động khởi chạy không tìm thấy khóa của bạn.

  2. Đảm bảo tất cả các phím của bạn được hiển thị khi được thêm khi bạn nhập ssh-add -A.

  3. Tạo một tệp có tên com.yourusername.ssh-add.plist trong ~/Library/LaunchAgents/ với nội dung bên dưới. Tệp Plist chẳng hạn như cái này được sử dụng bởi launchd để chạy tập lệnh khi bạn đăng nhập. [2]  [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Nói launchd để tải tập tin plist bạn vừa tạo bằng cách thực thi: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Và bạn nên được tất cả các thiết lập.


70
2017-12-12 18:17



Liên quan: apple.stackexchange.com/questions/48502/… - slm


Có một cách đơn giản hơn Câu trả lời của Ricardo để duy trì mật khẩu của bạn giữa các phiên / khởi động lại của máy Mac chạy 10,12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    Lưu ý: thay đổi đường dẫn đến vị trí khóa id_rsa của bạn.
  2. ssh-add -A 
  3. Tạo (hoặc chỉnh sửa nếu nó tồn tại) như sau ~/.ssh/config tập tin:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    Bây giờ mật khẩu được nhớ giữa các lần khởi động lại!

Apple cố ý thay đổi hành vi cho ssh-agent trong macOS 10.12 Sierra để không còn tự động tải các khóa SSH trước đó, như đã lưu ý trong OpenRadar, Thảo luận trên TwitterGhi chú kỹ thuật từ Apple. Giải pháp trên sẽ bắt chước hành vi cũ của El Capitan và ghi nhớ mật khẩu của bạn.


29
2018-01-05 18:53



Tuyệt vời, hoạt động như một say mê, imho sạch hơn rất nhiều sau đó những người khác và giải quyết ở đúng nơi :) - GerardJP


Lưu ý: đối với macOS Sierra, vui lòng tham khảo thêm trả lời bởi ChrisJF.

[Câu trả lời của Jeff McCarrell] [2] là chính xác, ngoại trừ lệnh thêm cụm từ mật khẩu chứa dấu gạch ngang thay vì dấu gạch ngang, tức là –K thay vì -K, gây ra một thông báo về hiệu quả của –K: No such file or directory. Nó nên đọc:

ssh-add -K [path/to/private SSH key]

9
2018-04-28 13:28



Đây phải là một nhận xét cho câu trả lời bạn đề cập đến chứ không phải là câu trả lời mới. Chúng ta đang nói về an ninh ở đây. Người ta có thể đề nghị bạn nên cẩn thận gõ nó ra thay vì sao chép và dán một cách mù quáng ssh-add -K - Phil_1984_
Sử dụng dấu nối với K, tôi nhận được illegal option -- K. Chữ thường k được liệt kê như một tùy chọn. - Sam Dutton
Cảm ơn vì bạn đã phản hồi. Tôi vừa kiểm tra trên macOS Sierra: -K, tức là dash-capital-K, vẫn hợp lệ - simonair


Tôi nghi ngờ bạn không sử dụng mặc định ssh chỉ huy. Bạn có không ssh cài đặt qua cổng? Thử which ssh để xem ssh lệnh bạn đang sử dụng.

Thông thường nó sẽ hiển thị một hộp thoại yêu cầu bạn mật khẩu, nếu nó chưa được lưu trữ trong keychain của bạn.


6
2017-12-28 12:55



Tôi không sử dụng cổng. - John Topley
Cảm ơn cho các thông tin :) Tôi đã có vấn đề bởi vì tôi đã sử dụng OpenSSH từ Homebrew. - ggustafsson


Tôi đã có một vấn đề tương tự trong khi cố gắng đăng nhập bằng cách sử dụng một khách hàng ssh cert. Trong trường hợp cụ thể này, nó là để truy cập kho git. Đây là tình huống:

  • Khóa đã được lưu trong ~/.ssh/
  • Khóa riêng có cụm mật khẩu.
  • Cụm mật khẩu được lưu trữ trong keychain đăng nhập OS X. ~/Library/Keychains/login.keychain
  • Kết nối như sau: mac của tôi -> từ xa mac -> git / ssh server
  • Mac OS X 10.8.5

Khi tôi kết nối với mac từ xa bằng máy tính từ xa, tôi không gặp vấn đề gì. Tuy nhiên khi kết nối với SSH với mac từ xa, mỗi lần tôi được hỏi mật khẩu ssh. Các bước sau đã giải quyết nó cho tôi.

  1. security unlock-keychain Cụm mật khẩu được lưu trữ trong keychain đăng nhập. Điều này mở khóa nó và cho phép ssh-agent truy cập nó.
  2. eval `ssh-agent -s` Khởi động ssh-agent để sử dụng shell. Nó sẽ nhận được mật khẩu từ keychain và sử dụng nó để mở khóa khóa ssh riêng.
  3. Thiết lập kết nối ssh / git và thực hiện công việc của tôi.
  4. eval `ssh-agent -k` Giết tác nhân ssh đang chạy.
  5. security lock-keychain Khóa lại móc khóa.

6
2017-10-14 12:29



Để # 2 làm việc cho tôi trong một bí danh, tôi phải sử dụng eval \$(ssh-agent) mỗi Re: đăng nhập từ xa và keychain. Khi không nằm trong bí danh eval $(ssh-agent) công trinh (mà không có dấu gạch chéo ngược $). - Travis


Xem thêm:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... thêm ghi chú này khi có thêm chi tiết được yêu cầu: lệnh "bảo mật" có khả năng nhập khóa (và những thứ khác) trực tiếp vào Keychains. Điều tốt đẹp là không giống như ssh-add, bạn có thể chỉ định keychain. Điều này làm cho nó có thể nhập trực tiếp vào hệ thống Keychain ("bảo mật con người" để tìm hiểu cách thức)


4
2018-03-26 09:45



Bạn có thể cung cấp thêm một chút chi tiết cho câu trả lời này không? Cảm ơn. - Matthew Williams


Giải pháp tốt nhất và Apple dự định (kể từ macOS 10.12.2) được mô tả đây

Vì vậy, chỉ cần làm như sau:

echo "UseKeychain yes" >> ~ / .ssh / config


1
2018-01-26 10:39



Sử dụng >> có nguy cơ nếu bạn nhập lệnh nhiều lần. Tốt hơn nên tạo một phiên bản thủ công của tệp, như được mô tả bằng Câu trả lời của ChrisJF. - Cœur
Có bạn ngay đó - Ben