macOS liên tục hỏi mật khẩu ssh của tôi kể từ khi tôi cập nhật lên Sierra


588

Nó được sử dụng để nhớ cụm mật khẩu, nhưng bây giờ nó hỏi tôi mỗi lần.

Tôi đã đọc rằng tôi cần tạo lại khóa công khai bằng lệnh này, điều mà tôi đã làm:

ssh-keygen -y -f id_rsa > id_rsa.pub

nhưng nó không sửa được gì cả.

Làm cách nào để macOS nhớ lại cụm mật khẩu của mình?


Tôi đang gặp phải hành vi liên quan: Trước đó, hộp thoại bấm phím sẽ bật lên để hỏi mật khẩu, bây giờ tôi chỉ nhận được lời nhắc bảng điều khiển SSH thông thường. Một số đăng ký chương trình trợ giúp có lẽ đã biến mất.
Daniel B

1
Đã nhiều năm kể từ khi tôi tạo id_rsa của mình và tôi chưa bao giờ sử dụng cụm mật khẩu và sử dụng cụm từ này để ssh vào nhiều máy chủ. Tôi có thực sự có một mật khẩu trên đó không, hay chỉ là Sierra nghĩ rằng tôi nên? Lưu ý rằng $ cat ~ / .ssh / id_rsa | đầu -2 ----- BEGIN RSA PRIVATE KEY ----- Proc-Type: 4, ENCRYPTED
Joe Murray


Nếu bạn đang sử dụng Pretzo và không có câu trả lời nào trong số này giải quyết được vấn đề của bạn: Hãy chắc chắn rằng bạn không sshkích hoạt mô-đun zpretzorc. Dù sao thì nó cũng không cần thiết trên macOS và nếu được bật, nó sẽ nhắc bạn nhập cụm mật khẩu ngay cả khi bạn đã thêm UseKeychain.
Jimothy

1
hãy thử làm ssh -v ...để xem nó có bất kỳ thông tin gỡ lỗi hữu ích nào không ...
rogerdpack

Câu trả lời:


1129

Trong phiên bản mới nhất của macOS (10.12.2), điều này rất dễ khắc phục. Chỉ cần chỉnh sửa của bạn ~/.ssh/configvà kích hoạt UseKeychaintùy chọn:

Host *
    UseKeychain yes

Không cần phải thay đổi bất cứ điều gì khác. Bây giờ mọi thứ hoạt động theo cách nó được sử dụng để làm việc trước khi cập nhật mới nhất. Bạn không cần thêm khóa vào ssh-agent.


Chỉnh sửa: Bạn vẫn có thể cần nhập cụm mật khẩu của mình một lần. Nếu bạn không biết điều đó, hãy làm theo các hướng dẫn sau để tiết lộ nó.


24
Điều này hoàn toàn làm việc cho tôi. Tất cả mọi thứ dưới đây có vẻ phức tạp hơn sửa chữa này.
Br.Bill

82
Lưu ý, Host *khối phải (hầu như) luôn được đặt ở dưới cùng của ~/.ssh/configtệp của bạn . Khi sshtìm kiếm cài đặt, nó sử dụng giá trị đầu tiên mà nó tìm thấy. Do đó, bằng cách đặt khối ký tự đại diện ở cuối, nó hoạt động như một bộ mặc định; bạn có thể ghi đè cài đặt cho các máy chủ cụ thể bằng cách chỉ định chúng trước đó trong tệp.
Molomby

6
Điều này cũng làm việc cho tôi nhưng tôi đã phải nhập cụm mật khẩu chính xác một lần. Có một câu trả lời khác mô tả cách bạn có thể xem mật khẩu nếu bạn không nhớ nó.
FGreg

26
Nếu tệp cấu hình không tồn tại, tạo một tệp và thêm tệp này cũng sẽ hoạt động.
wynshaft

6
Bạn không cần Host *tiêu đề. Chỉ cần nối thêm một dòng UseKeychain yesở đầu của bạn .ssh/confignếu bạn muốn điều này áp dụng cho tất cả các máy chủ lưu trữ.
sj26

185

Tôi đã từng gặp vấn đề tương tự. Móc khóa MacOS Sierra liên tục yêu cầu cụm mật khẩu. Id_rsa của bạn phải được mã hóa bằng cụm mật khẩu để bảo mật. Sau đó thử thêm nó vào móc khóassh-add -K ~/.ssh/id_rsa

Nếu khóa của bạn nằm trong một thư mục khác ~/.sshthì hãy thay thế bằng thư mục chính xác.

Keychain bây giờ biết khóa ssh của bạn và, hy vọng, tất cả các công việc bây giờ (của tôi đã làm)


25
Điều này hoạt động nhưng dường như không tồn tại khi tôi khởi động lại máy tính của tôi. Còn ai có vấn đề tương tự không?
joshua.paling

1
Yup, vấn đề tương tự ở đây. @ joshua.paling
kingkool68

18
@ joshua.paling, kingkool68 - Apple đã loại bỏ khả năng ghi nhớ các khóa SSH của bạn trong quá trình khởi động lại để phù hợp với hành vi OpenSSH chính thống. Xem câu hỏi này để biết các cách khác để đạt được chức năng tương tự: apple.stackexchange.com/questions/254468/ mẹo
Evan Pon

@EvanPon Nhưng nó sẽ không hoạt động với các khóa được mã hóa, phải không?
Konrad Rudolph

2
@KonradRudolph nó hoạt động với tôi. Gọi ssh-addbằng -Atùy chọn sẽ tìm trong móc khóa MacOS cho bất kỳ mật khẩu nào cho danh tính được đề cập. Tôi tin rằng nó sẽ nhắc bạn nếu mật khẩu không có trong móc khóa.
Evan Pon

73

Điều này đã khắc phục vấn đề tương tự của tôi:

/usr/bin/ssh-add -K

Điều này lưu trữ cụm mật khẩu trong móc khóa của bạn.

Cập nhật (cảm ơn @PalCo): Điều này hoạt động nhưng không tồn tại giữa các lần khởi động lại. Giải pháp của @ jukka-suomela trên trang này không hoạt động trong quá trình khởi động lại. Bạn có thể tìm thấy câu trả lời ở đây:

https://superuser.com/a/1158050/234685


3
Đây là điều duy nhất hoạt động.
cryptic0

5
Tôi không cần tạo .ssh / .config khi sử dụng giải pháp này.
Shai

Điều này làm việc cho tôi. Không cần chỉnh sửa tập tin máy chủ. Tôi đang ở Sierra.
cchiera

Điều này làm việc cho tôi trên Mac OS Sierra.
Dayron Gallardo

2
Như đã nêu trước đây, điều này hoạt động nhưng không tồn tại giữa các lần khởi động lại. Giải pháp của jukka-suomela hoạt động trên khởi động lại.
EasyCo

40

Tôi chỉ phải nhập cụm mật khẩu chính xác một lần và nó bắt đầu hoạt động. Vấn đề là tôi đã không nhớ cụm mật khẩu SSH ban đầu của mình, nhưng tôi đã khôi phục nó bằng cách làm theo các bước sau từ Github:

  • Trong Finder, tìm kiếm ứng dụng Keychain Access.
  • Trong Truy cập Keychain, tìm kiếm SSH.
  • Nhấp đúp chuột vào mục nhập cho khóa SSH của bạn để mở hộp thoại mới.
  • Hộp thoại truy cập Keychain Trong góc dưới bên trái, chọn Hiển thị mật khẩu.
  • Bạn sẽ được nhắc nhập mật khẩu quản trị. Nhập nó vào hộp thoại "Keychain Access".
  • Mật khẩu của bạn sẽ được tiết lộ.

2
Không hoạt động. Terminal vẫn nói "cụm mật khẩu xấu"
Jayden Lawson

18

Không có giải pháp nào ở trên hoạt động sau khi cài đặt Sierra trên El Capitan trên MacBook Pro mới. Sierra theo thiết kế không lưu các khóa SSH trong móc khóa.

Hai giải pháp làm việc cho tôi. Một là thêm lệnh ssh-add -A &> /dev/nullvào ~ / .bash_profile. Mỗi khi bạn mở terminal, lệnh này sẽ được thực thi ( &> /dev/nullphần sẽ gửi đầu ra của lệnh tệp / dev / null).

Một giải pháp phức tạp hơn nhưng hơi lắt léo là tạo ra một plist với lệnh được thực thi mỗi khi HĐH được khởi động như được đề xuất trong Lưu khóa SSH trong macOS Sierra . Điều này liên quan đến việc sử dụng Xcode để tạo tệp.


Đây dường như cũng là câu trả lời chính thức của Apple - xem openradar.appspot.com/27348363
Nick Maynard

Giải pháp tốt nhất cho đến bây giờ đối với tôi. Tôi đang sử dụng Mac OSX Sierra (10.12.2).
zyc

15

Một cách khắc phục là thêm phần sau vào tệp ~ / .ssh / config của bạn:

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

Lấy từ: https://www.reddit.com/r/osx/comments/52zn5r/diff Khó_with_sshagent_in_macos_sierra / Cũng xem: https://apple.stackexchange.com/a/264974/3810


Cho đến nay, không có câu trả lời nào, có ai đề cập đến Bad configuration option: usekeychainlỗi tôi gặp phải với UseKeychain (tuy nhiên nó được viết hoa). Nhưng tôi đã có thể làm cho nó hoạt động bằng cách chỉ xóa dòng đó và để lại AddKeysToAgent và IdentityFile (bạn vẫn phải nhập cụm mật khẩu lần đầu tiên). Đây là với macOS Sierra 10.12.6.
William Turrell

điều này hoạt động tốt khi tôi ở trong thiết bị đầu cuối và sử dụng lệnh ssh, nhưng các ứng dụng khác, như WebStorm sử dụng thiết bị đầu cuối của riêng chúng, không sử dụng cấu hình thi cho đến khi tôi sử dụng lệnh ssh trong thiết bị đầu cuối thông thường. Sau đó, nó hoạt động ở khắp mọi nơi, bất kỳ đề nghị?
santiago arizti

@WilliamTurrell Nếu điều này vẫn xảy ra, hãy nhập which sshđể đảm bảo rằng bạn đang sử dụng /usr/bin/sshvà không phải là phiên bản từ Fink hoặc MacPorts, sẽ nằm dưới một cái gì đó như /usr/local/bin/sshhoặc/opt/local/bin/ssh
Stefan Lasiewski

7

Sáng nay, tôi gặp vấn đề tương tự như bạn sau khi cập nhật lên Sierra. Trong trường hợp của tôi, id_rsatập tin đã được mã hóa và sau khi giải mã nó hoạt động như một lá bùa.

  1. Xác minh nếu id_rsatệp của bạn được mã hóa bằng lệnh sau:cat ~/.ssh/id_rsa | head -2
  2. Nếu dòng thứ hai nói Proc-Type: 4,ENCRYPTED, nó được mã hóa và bạn có thể thử giải mã nó
  3. Quan trọng: tạo một bản sao lưu của id_rsatập tin gốc của bạn ! Sử dụng lệnhcp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Giải mã khóa riêng của bạn với openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Xóa khóa gốc ( rm ~/.ssh/id_rsa) và thay thế bằng khóa đã được giải mã:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Sau các bước này, bạn sẽ có thể sử dụng lại ssh.


4
Mặc dù đó là một cách giải quyết khác nhau, tôi không nghĩ rằng nó thực sự giải quyết được vấn đề của OP.
Daniel B

Điều này làm việc cho tôi. @DanielB, vấn đề với việc làm này là gì?
Dag Høidahl

7
@ DagHøidahl Khóa sẽ không còn được mã hóa. Nó có thể bị đánh cắp với quyền người dùng thông thường, vì vậy mã hóa là một NÊN mạnh mẽ.
Daniel B

6
Thao tác này sẽ xóa mật khẩu khỏi khóa, đó là lý do tại sao nó hoạt động xung quanh vấn đề của OP. Nhưng tôi khuyên bạn nên chống lại điều này. Mật khẩu là tất cả những gì ngăn mọi người sử dụng khóa của bạn khi bị đánh cắp. Vì khóa của bạn có thể sẽ cung cấp quyền truy cập vào nhiều hệ thống mà bạn không muốn làm suy yếu nó.
Martijn Heemels

5

Tôi đã thử nhiều câu trả lời ở đây, nhưng vẫn gặp vấn đề với các phím từ xa đi qua (chẳng hạn như khi sử dụng capistrano). Để giải quyết nó, tôi đọc Technote từ apple và tạo tập tin cấu hình này. Không còn yêu cầu mật khẩu của tôi!

https://developer.apple.com/l Library / content / technotes / tn2449 / _index.html

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

4

Tôi cũng gặp vấn đề này khi cố gắng triển khai một số mã bằng Capistrano . Rất bực bội. Đây là hai phương pháp tôi biết để giải quyết vấn đề này.

Phương pháp 1: Thêm tất cả các khóa đã biết vào tác nhân SSH.

Vì vậy, một giải pháp tôi tìm thấy là chạy ssh-addvới -Atùy chọn, trong đó thêm tất cả các danh tính đã biết vào tác nhân SSH bằng cách sử dụng bất kỳ cụm mật khẩu nào được lưu trữ trong móc khóa của bạn như thế này:

ssh-add -A

Bây giờ điều này hoạt động nhưng nó sẽ không tiếp tục trên các lần khởi động lại. Vì vậy, nếu bạn muốn không bao giờ lo lắng về điều này một lần nữa, chỉ cần mở ~/.bash_profiletệp người dùng của bạn như thế này:

nano ~/.bash_profile

Và thêm dòng này vào dưới cùng:

ssh-add -A 2>/dev/null;

Bây giờ khi bạn mở một cửa sổ Terminal mới, tất cả sẽ tốt!

Phương pháp 2: Chỉ thêm các khóa SSH có trong móc khóa vào tác nhân.

Vì vậy, trong khi ssh-add -Atùy chọn nên hoạt động cho hầu hết các trường hợp cơ bản, tôi đã gặp phải một vấn đề gần đây khi tôi có 6-7 hộp Vagrant (sử dụng các khóa / nhận dạng SSH để truy cập) trên một máy phổ biến hơn id_rsa.pub.

Tóm lại, cuối cùng tôi đã bị khóa khỏi một máy chủ từ xa do có quá nhiều lần thử thất bại dựa trên các khóa / danh tính SSH vì quyền truy cập của máy chủ dựa trên mật khẩu và các khóa / danh tính SSH là các khóa / danh tính SSH. Vì vậy, nhân viên SSH đã thử tất cả các khóa SSH của tôi, không thành công và tôi thậm chí không thể nhận được lời nhắc mật khẩu.

Vấn đề là ssh-add -Asẽ chỉ tùy ý thêm mọi khóa / nhận dạng SSH duy nhất mà bạn có vào đại lý ngay cả khi không cần thiết phải làm như vậy; chẳng hạn như trong trường hợp hộp Vagrant.

Giải pháp của tôi sau nhiều thử nghiệm như sau.

Đầu tiên, nếu bạn có nhiều khóa / danh tính SSH được thêm vào đại lý của mình hơn là bạn cần có như được hiển thị ssh-add -lsau đó sẽ xóa tất cả chúng khỏi tác nhân như vậy:

ssh-add -D

Sau đó, bắt đầu tác nhân SSH làm quy trình nền như sau:

eval "$(ssh-agent -s)"

Bây giờ, nó trở nên kỳ lạ và tôi không chắc tại sao. Trong một số trường hợp, bạn có thể thêm ~/.ssh/id_rsa.pubkhóa / danh tính cụ thể vào đại lý như vậy:

ssh-add ~/.ssh/id_rsa.pub

Nhập cụm mật khẩu của bạn, nhấn Returnvà bạn sẽ tốt để đi.

Nhưng trong các trường hợp khác, chỉ cần chạy nó là đủ để thêm khóa / danh tính:

ssh-add -K

Nếu tất cả đều hoạt động, hãy nhập ssh-add -lvà bạn sẽ thấy một khóa / danh tính SSH đơn độc được liệt kê.

Tất cả đều tốt? Bây giờ hãy mở ra .bash_profile:

nano ~/.bash_profile

Và thêm dòng này vào dưới cùng; nhận xét hoặc xóa -Aphiên bản nếu bạn có vị trí đó:

ssh-add -K 2>/dev/null;

Điều đó sẽ cho phép khóa / danh tính SSH được tải lại cho tác nhân SSH trong mỗi lần khởi động / khởi động lại.

CẬP NHẬT: Apple hiện đã thêm một UseKeychaintùy chọn cho các tùy chọn cấu hình SSH đang mở và cũng xem xét ssh-add -Amột giải pháp.

Kể từ macOS Sierra 10.12.2, Apple (tôi giả sử) đã thêm UseKeychaintùy chọn cấu hình cho cấu hình SSH. Kiểm tra trang man (thông qua man ssh_config) hiển thị thông tin sau:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

Việc Apple sôi sục khi thấy giải pháp là thêm ssh-add -Avào của bạn .bash_profile như được giải thích trong vé Open Radar này hoặc thêm vào UseKeychainnhư một trong các tùy chọn trong mỗi người dùng ~/.ssh/config.


3

Câu trả lời của Jukka Suomela là chính xác, nhưng nếu bạn đang sử dụng opensshcài đặt từ homebrewđó, thì bạn cũng cần gỡ cài đặt nó bằng:

brew remove openssh

... để quay trở lại openssh mặc định của hệ thống, vì một cái của homebrew không hỗ trợ UseKeychainmục nhập cấu hình ssh.


1
Nếu bất cứ ai muốn nó với homebrew, hãy ping tôi tại đây: github.com/rdp/homebrew-openssh-gssapi
rogerdpack

1

Tôi đã thử tất cả các giải pháp được đề xuất ở đây, nhưng tôi không cài đặt móc khóa trong máy Mac của mình.

Thêm vào dòng sau ở .ssh/configtệp trên cùng trên cả máy cục bộ và máy từ xa đều hoạt động với tôi.

PubkeyAcceptedKeyTypes=+ssh-dss 

1

Bạn cần một .plisttệp được thêm vào ~/Library/LaunchAgents/để chạy ssh-add -Atrên mỗi lần khởi động macOS.

Có một lệnh duy nhất thực hiện điều này (từ SSH-key-in-macOS-Sierra-móc khóa ) đó là:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
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.