macOS terus menanyakan frasa sandi ssh saya sejak saya memperbarui ke Sierra

587

Dulu mengingat frasa sandi, tapi sekarang itu meminta saya setiap kali.

Saya telah membaca bahwa saya perlu membuat ulang kunci publik dengan perintah ini, yang saya lakukan:

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

tapi itu tidak memperbaiki apa pun.

Bagaimana saya bisa membuat macOS mengingat frasa sandi saya lagi?

erwan
sumber
Saya mengalami perilaku terkait: Sebelumnya, dialog gantungan kunci akan muncul untuk meminta kata sandi, sekarang saya baru saja mendapatkan prompt konsol SSH biasa. Beberapa pendaftaran program pembantu mungkin hilang.
Daniel B
1
Sudah bertahun-tahun sejak saya membuat id_rsa saya dan saya tidak pernah menggunakan kata sandi dan menggunakannya untuk ssh ke banyak server. Apakah saya benar-benar memiliki frasa sandi di dalamnya, atau hanya Sierra yang menurut saya harus melakukannya? Perhatikan bahwa $ cat ~ / .ssh / id_rsa | head -2 ----- BEGIN RSA PRIVATE KEY ----- Proc-Type: 4, ENCRYPTED
Joe Murray
Jika Anda menggunakan Pretzo dan tidak ada jawaban yang memecahkan masalah Anda: Pastikan Anda tidak sshmengaktifkan modul ini zpretzorc. Toh itu tidak perlu di macOS, dan jika diaktifkan, itu akan meminta Anda untuk frasa sandi Anda bahkan setelah Anda menambahkan UseKeychain.
Jimothy
1
coba lakukan ssh -v ...untuk melihat apakah ada info debug yang berguna ...
rogerdpack

Jawaban:

1128

Dalam versi terbaru dari macOS (10.12.2), ini mudah diperbaiki. Edit saja ~/.ssh/configdan aktifkan UseKeychainopsi:

Host *
    UseKeychain yes

Tidak perlu mengubah apa pun. Sekarang semuanya berfungsi seperti dulu sebelum pembaruan terbaru. Anda tidak perlu menambahkan kunci ssh-agent.


Sunting: Anda mungkin masih perlu memasukkan frasa sandi satu kali. Jika Anda tidak mengetahuinya, ikuti petunjuk ini untuk mengungkapkannya.

Jukka Suomela
sumber
24
Ini benar-benar bekerja untuk saya. Segala sesuatu di bawah ini tampaknya lebih rumit daripada perbaikan ini.
Br.Bill
82
Catatan, Host *blok harus (hampir) selalu ditempatkan di bagian bawah ~/.ssh/configfile Anda . Saat sshmencari pengaturan, ia menggunakan nilai pertama yang ditemukannya. Dengan demikian, dengan meletakkan menempatkan blok wildcard di akhir, ia bertindak sebagai seperangkat default; Anda dapat mengesampingkan pengaturan untuk host tertentu dengan menentukannya lebih awal dalam file.
Molomby
6
Ini juga berhasil bagi saya, tetapi saya harus memasukkan frasa sandi dengan benar sekali. Ada jawaban lain yang menjelaskan bagaimana Anda dapat melihat kata sandi jika Anda tidak mengingatnya.
FGreg
26
Jika file config tidak ada, membuat dan menambahkan ini akan berfungsi juga.
wynshaft
6
Anda tidak perlu Host *tajuk. Cukup tambahkan satu baris UseKeychain yesdi bagian atas Anda .ssh/configjika Anda ingin ini berlaku untuk semua host.
sj26
185

Saya memiliki masalah yang sama. Gantungan kunci MacOS Sierra terus meminta kata sandi. Id_rsa Anda harus dienkripsi dengan frasa sandi untuk keamanan. Kemudian coba tambahkan ke gantungan kuncissh-add -K ~/.ssh/id_rsa

Jika kunci Anda ada di folder lain ~/.sshmaka gantikan dengan folder yang benar.

Gantungan kunci sekarang tahu kunci ssh Anda dan, semoga, semua berfungsi sekarang (milik saya)

Lars G.
sumber
25
Ini berfungsi tetapi tampaknya tidak berlanjut ketika saya me-restart komputer saya. Adakah orang lain yang memiliki masalah yang sama?
joshua.paling
1
Yup, masalah yang sama di sini. @ joshua.paling
kingkool68
18
@ joshua.paling, kingkool68 - Apple telah menghapus kemampuan untuk mengingat kunci SSH Anda saat boot ulang untuk menyesuaikan dengan perilaku mainstream OpenSSH. Lihat pertanyaan ini untuk cara-cara lain untuk mencapai fungsi yang sama: apple.stackexchange.com/questions/254468/…
Evan Pon
@ EvanPon Tapi itu tidak akan berfungsi dengan kunci terenkripsi, kan?
Konrad Rudolph
2
@KonradRudolph berfungsi untuk saya. Memanggil ssh-adddengan -Aopsi akan mencari di gantungan kunci MacOS untuk kata sandi apa pun untuk identitas yang dimaksud. Saya percaya ini akan meminta Anda jika kata sandi tidak ada di gantungan kunci.
Evan Pon
73

Ini memperbaiki masalah saya yang serupa:

/usr/bin/ssh-add -K

Ini menyimpan frasa sandi di gantungan kunci Anda.

Pembaruan (terima kasih @EasyCo): Ini berfungsi tetapi tidak bertahan di antara restart. Solusi @ jukka-suomela pada halaman ini berfungsi di seluruh restart. Anda dapat menemukan jawabannya di sini:

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

kritikus
sumber
3
Ini adalah satu-satunya yang berfungsi.
cryptic0
5
Saya tidak perlu membuat .ssh / .config saat menggunakan solusi ini.
Shai
Ini berhasil untuk saya. Tidak perlu mengedit file host. Saya di Sierra.
cchiera
Ini bekerja untuk saya di Mac OS Sierra.
Dayron Gallardo
2
Seperti yang dinyatakan sebelumnya, ini berfungsi tetapi tidak bertahan antara restart. Solusi @ jukka-suomela bekerja di seluruh restart.
EasyCo
40

Saya hanya perlu memasukkan frasa sandi yang benar satu kali dan mulai berfungsi. Masalahnya adalah saya tidak ingat kata sandi SSH asli saya, tetapi saya memulihkannya dengan mengikuti langkah-langkah berikut dari Github:

  • Di Finder, cari aplikasi Keychain Access.
  • Di Akses Keychain, cari SSH.
  • Klik dua kali pada entri untuk kunci SSH Anda untuk membuka kotak dialog baru.
  • Dialog akses gantungan kunci Di sudut kiri bawah, pilih Tampilkan kata sandi.
  • Anda akan dimintai kata sandi administratif. Ketik ke dalam kotak dialog "Akses Keychain".
  • Kata sandi Anda akan terungkap.
Olli Jaakkola
sumber
2
Tidak bekerja Terminal masih mengatakan "frasa sandi buruk"
Jayden Lawson
18

Tidak ada solusi di atas yang berfungsi setelah memasang Sierra over El Capitan pada MacBook Pro baru. Sierra dengan desain tidak menyimpan kunci SSH di gantungan kunci.

Dua solusi berhasil untuk saya. Pertama adalah menambahkan perintah ssh-add -A &> /dev/nullke ~ / .bash_profile. Setiap kali Anda membuka terminal, perintah ini akan dieksekusi ( &> /dev/nullbagian mengirimkan output dari perintah file / dev / null).

Solusi yang lebih rumit tetapi sedikit lebih licin adalah membuat plist dengan perintah yang dijalankan setiap kali OS di-boot seperti yang disarankan dalam Menyimpan kunci SSH di gantungan kunci macOS Sierra . Ini melibatkan penggunaan Xcode untuk membuat file.

Terima kasih Snow
sumber
Ini tampaknya juga jawaban resmi Apple - lihat openradar.appspot.com/27348363
Nick Maynard
Solusi terbaik sampai sekarang untuk saya. Saya menggunakan Mac OSX Sierra (10.12.2).
zyc
15

Salah satu perbaikannya adalah dengan menambahkan yang berikut ke file ~ / .ssh / config Anda:

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

Diambil dari: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ Juga lihat: https://apple.stackexchange.com/a/264974/3810

ThomasW
sumber
Sejauh ini, tidak ada jawaban, ada yang menyebutkan Bad configuration option: usekeychainkesalahan yang saya dapatkan dengan UseKeychain (namun huruf besar). Tapi saya adalah bisa mendapatkannya bekerja dengan menghapus hanya baris itu dan meninggalkan AddKeysToAgent dan IdentityFile (Anda masih harus memasukkan kata sandi pertama kalinya). Ini dengan macOS Sierra 10.12.6.
William Turrell
ini berfungsi dengan baik ketika saya berada di terminal dan menggunakan perintah ssh, tetapi aplikasi lain, seperti WebStorm yang menggunakan terminal mereka sendiri, jangan mengambil konfigurasi ini sampai saya pertama kali menggunakan perintah ssh di terminal reguler. lalu bekerja di mana-mana, ada saran?
santiago arizti
@WilliamTurrell Jika ini masih terjadi, ketik which sshuntuk memastikan bahwa Anda menggunakan /usr/bin/sshdan bukan versi dari Fink atau MacPorts, yang akan berada di bawah sesuatu seperti /usr/local/bin/sshatau/opt/local/bin/ssh
Stefan Lasiewski
7

Pagi ini, saya memiliki masalah yang sama dengan Anda setelah memperbarui ke Sierra. Dalam kasus saya, id_rsafile dienkripsi dan setelah mendekripsi itu berfungsi seperti pesona.

  1. Verifikasi apakah id_rsafile Anda dienkripsi dengan perintah berikut:cat ~/.ssh/id_rsa | head -2
  2. Jika baris kedua mengatakan Proc-Type: 4,ENCRYPTED, itu terenkripsi dan Anda bisa mencoba mendekripsi
  3. Penting: buat cadangan id_rsafile asli Anda ! Gunakan perintahcp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Dekripsi kunci pribadi Anda dengan openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Hapus kunci asli ( rm ~/.ssh/id_rsa) dan ganti dengan yang didekripsi:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Setelah langkah-langkah ini, Anda harus dapat menggunakan ssh lagi.

Martijn Pieters
sumber
4
Sementara itu merupakan solusi, saya tidak berpikir itu benar-benar menyelesaikan masalah OP.
Daniel B
Ini bekerja untuk saya. @DanielB, apa masalah dengan melakukan ini?
Dag Høidahl
7
@ DagHøidahl Kuncinya tidak akan lagi dienkripsi. Itu dapat dicuri dengan hak pengguna biasa, sehingga enkripsi HARUS kuat.
Daniel B
6
Ini menghapus kata sandi dari kunci, itulah sebabnya ia bekerja di sekitar masalah OP. Tapi saya sarankan menentang ini. Hanya kata sandi yang menghentikan orang untuk menggunakan kunci Anda saat dicuri. Karena kunci Anda mungkin akan memberikan akses ke beberapa sistem, Anda tidak ingin melemahkannya.
Martijn Heemels
5

Saya mencoba beberapa jawaban di sini, tetapi masih mengalami masalah dengan passing tombol jarak jauh (seperti ketika menggunakan capistrano). Untuk mengatasinya, saya membaca technote dari apple dan menjadikan ini file konfigurasi saya. Tidak perlu lagi meminta kata sandi saya!

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

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Dewi Geek
sumber
4

Saya memiliki masalah ini juga ketika mencoba untuk menyebarkan beberapa kode menggunakan Capistrano . Sangat membuat frustrasi. Berikut adalah dua metode yang saya tahu untuk menangani masalah ini.

Metode 1: Tambahkan semua kunci yang dikenal ke agen SSH.

Jadi salah satu solusi yang saya temukan adalah menjalankan ssh-adddengan -Aopsi — yang menambahkan semua identitas yang dikenal ke agen SSH menggunakan frasa sandi apa pun yang disimpan dalam gantungan kunci Anda — seperti ini:

ssh-add -A

Sekarang ini berfungsi tetapi tidak akan bertahan di seluruh reboot. Jadi, jika Anda tidak ingin khawatir tentang ini lagi, buka saja ~/.bash_profilefile pengguna Anda seperti ini:

nano ~/.bash_profile

Dan tambahkan baris ini ke bawah:

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

Sekarang ketika Anda membuka jendela Terminal baru, semua pasti bagus!

Metode 2: Tambahkan hanya kunci SSH yang ada di gantungan kunci ke agen.

Jadi, sementara ssh-add -Aopsi harus bekerja untuk sebagian besar kasus dasar, saya mengalami masalah baru-baru ini di mana saya memiliki 6-7 kotak Vagrant (yang menggunakan kunci / identitas SSH untuk akses) pengaturan pada mesin di atas yang lebih umum id_rsa.pubdi tempat.

Singkatnya, saya akhirnya dikunci dari server jauh karena terlalu banyak percobaan gagal berdasarkan kunci / identitas SSH karena akses server didasarkan pada kata sandi dan kunci / identitas SSH adalah kunci / identitas SSH. Jadi agen SSH mencoba semua kunci SSH saya, gagal dan saya bahkan tidak bisa masuk ke prompt kata sandi.

Masalahnya adalah bahwa ssh-add -Ahanya akan secara sewenang-wenang menambahkan setiap kunci SSH / identitas tunggal yang Anda miliki ke agen bahkan jika itu tidak perlu dilakukan; seperti dalam kasus kotak Vagrant.

Solusi saya setelah banyak pengujian adalah sebagai berikut.

Pertama, jika Anda memiliki lebih banyak kunci / identitas SSH yang ditambahkan ke agen Anda daripada yang Anda butuhkan — seperti yang diperlihatkan ssh-add -lkemudian bersihkan semuanya dari agen seperti:

ssh-add -D

Setelah itu selesai, kemudian mulai agen SSH sebagai proses latar belakang seperti:

eval "$(ssh-agent -s)"

Sekarang, ini jadi aneh dan saya tidak terlalu yakin mengapa. Dalam beberapa kasus, Anda dapat secara khusus menambahkan ~/.ssh/id_rsa.pubkunci / identitas ke agen seperti:

ssh-add ~/.ssh/id_rsa.pub

Ketikkan frasa sandi Anda, tekan Returndan Anda harus baik-baik saja.

Tetapi dalam kasus lain hanya menjalankan ini sudah cukup untuk mendapatkan kunci / identitas ditambahkan:

ssh-add -K

Jika itu berhasil, ketikkan ssh-add -ldan Anda akan melihat satu kunci SSH / identitas terdaftar.

Semuanya bagus? Sekarang buka .bash_profile:

nano ~/.bash_profile

Dan tambahkan baris ini ke bawah; komentar atau hapus -Aversi jika Anda memilikinya:

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

Itu akan memungkinkan kunci / identitas SSH untuk dimuat ulang ke agen SSH pada setiap startup / reboot.

PEMBARUAN: Apple sekarang telah menambahkan UseKeychainopsi ke opsi konfigurasi SSH terbuka dan mempertimbangkan ssh-add -Asolusinya juga.

Pada macOS Sierra 10.12.2, Apple (saya berasumsi) telah menambahkan UseKeychainopsi konfigurasi untuk konfigurasi SSH. Memeriksa halaman manual (via man ssh_config) menunjukkan info berikut:

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''.

Yang bermuara pada Apple melihat solusi sebagai menambah ssh-add -AAnda .bash_profile seperti yang dijelaskan dalam tiket Radar Terbuka ini atau menambahkan UseKeychainsebagai salah satu opsi dalam per pengguna ~/.ssh/config.

JakeGould
sumber
3

Jukka Suomela 's jawaban benar, tetapi jika Anda menggunakan opensshdiinstal dari homebrew, maka Anda juga perlu uninstall dengan:

brew remove openssh

... untuk beralih kembali ke openssh default sistem, karena homebrew tidak mendukung UseKeychainentri konfigurasi ssh.

Greg Dubicki
sumber
1
Jika ada yang menginginkannya dengan homebrew, ping saya di sini: github.com/rdp/homebrew-openssh-gssapi
rogerdpack
1

Saya mencoba semua solusi yang disarankan di sini, tetapi saya tidak memasang gantungan kunci di Mac saya.

Menambahkan ke baris berikut di .ssh/configfile teratas pada mesin lokal dan remote bekerja untuk saya.

PubkeyAcceptedKeyTypes=+ssh-dss 
Roei Bar Aviv
sumber
1

Anda memerlukan .plistfile yang ditambahkan ~/Library/LaunchAgents/untuk dijalankan ssh-add -Apada setiap startup macOS.

Ada satu perintah yang melakukan ini (dari SSH-keys-in-macOS-Sierra-keychain ) yaitu:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
AlecRust
sumber