Bagaimana saya bisa menambahkan kunci pribadi SSH saya secara permanen ke Keychain sehingga secara otomatis tersedia untuk ssh?

419

Tampaknya ssh-add -K ~/.ssh/id_rsaakan memuat kunci Anda tetapi akan meminta kata sandi setiap kali Anda reboot.

Saya mencari solusi yang tidak mengharuskan saya memasukkan kembali kata sandi utama antar login.

Sorin
sumber
1
Bisakah Anda mengatakan lebih banyak tentang kapan kata sandi muncul untuk Anda? Saya bertanya karena saya memiliki kunci ssh untuk server jarak jauh, yang saya jamin tidak sama dengan kata sandi login Mac saya atau apa pun, dan saya tidak harus memasukkan kata sandi untuk kunci ssh selama bertahun - tahun . Saya hanya bisa membuka terminal, ketik "ssh <server>", dan saya di sana. Saya pikir saya pertama kali mengatur kunci ini di bawah OSX 10.5. id_dsa, tapi saya pikir itu tidak masalah.
Michael H.
id_rsaKunci saya memiliki kata sandi di atasnya.
sorin
Saya juga memiliki masalah yang saya pecahkan sejak lama sehingga saya tidak ingat persis apa yang saya lakukan. Tapi saya pikir idenya adalah untuk tidak berlari ssh-add, tetapi jalankan saja sshsecara langsung. Anda akan mendapatkan jendela yang muncul sebagai frase pass untuk kunci tersebut, dan dengan kotak centang untuk membiarkan Anda menyimpannya di gantungan kunci Anda.
Harald Hanche-Olsen
1
@Sorin - begitu juga milikku! Saya harus memasukkannya sekali, dulu sekali, dan sejak itu Mac telah menyimpannya untuk saya. Semoga saran Harald akan membantu.
Michael H.
Apakah maksud Anda kata sandi Keychain (yaitu kata sandi login Anda) atau frasa sandi kunci? Jika itu yang terakhir, apakah frasa sandi Anda pasti tersimpan di Gantungan Kunci? Anda dapat memeriksa ini dengan membuka Akses Rantai Kunci dan mencarinya di gantungan kunci masuk.
Mathew Hall

Jawaban:

687

Pada OSX, ssh-addklien asli memiliki argumen khusus untuk menyimpan frasa sandi kunci pribadi di gantungan kunci OSX, yang berarti bahwa login normal Anda akan membuka kunci untuk digunakan dengan ssh. Pada OSX Sierra dan yang lebih baru, Anda juga harus mengonfigurasi SSH untuk selalu menggunakan gantungan kunci (lihat Langkah 2 di bawah).

Atau Anda dapat menggunakan kunci tanpa frasa sandi, tetapi jika Anda lebih suka keamanan yang tentu dapat diterima dengan alur kerja ini.

Langkah 1 - Simpan kunci di gantungan kunci

Lakukan ini sekali saja:

ssh-add -K ~/.ssh/[your-private-key]

Masukkan frasa sandi utama Anda, dan Anda tidak akan diminta lagi.

(Jika Anda menggunakan OSX versi pra-Sierra, Anda sudah selesai, Langkah 2 tidak diperlukan.)

Langkah 2 - Konfigurasikan SSH untuk selalu menggunakan gantungan kunci

Tampaknya OSX Sierra menghapus perilaku nyaman menahan tombol Anda di antara login, dan pembaruan ke ssh tidak lagi menggunakan gantungan kunci secara default. Karena itu, Anda akan diminta memasukkan kata sandi untuk kunci setelah Anda memutakhirkan, dan lagi setelah setiap restart.

Solusinya cukup sederhana, dan diuraikan dalam komentar thread github ini . Begini cara Anda mengaturnya:

  1. Pastikan Anda telah menyelesaikan Langkah 1 di atas untuk menyimpan kunci di gantungan kunci.

  2. Jika Anda belum melakukannya, buat ~/.ssh/configfile. Dengan kata lain, dalam .sshdirektori di direktori home Anda, buat file bernama config.

  3. Dalam .ssh/configfile itu, tambahkan baris berikut:

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

    Ubah ~/.ssh/id_rsake nama file aktual kunci pribadi Anda. Jika Anda memiliki kunci pribadi lainnya di ~.sshdirektori Anda , tambahkan juga satu IdentityFilebaris untuk masing-masingnya. Misalnya, saya memiliki satu baris tambahan yang bertuliskan IdentityFile ~/.ssh/id_ed25519kunci pribadi kedua.

    Ini UseKeychain yesadalah bagian kunci, yang memberitahu SSH untuk mencari di gantungan kunci OSX Anda untuk frasa sandi utama.

  4. Itu dia! Lain kali Anda memuat koneksi ssh, itu akan mencoba kunci pribadi yang Anda tentukan, dan itu akan mencari frasa sandi mereka di gantungan kunci OSX. Tidak perlu mengetik kata sandi.

trisweb
sumber
2
Ini hampir berhasil untuk saya. Gantungan kunci "login" saya sudah dinonaktifkan secara otomatis, jadi jawaban Matthew Sanabria tidak berlaku. Menggunakan ssh-add -K ...menambahkan kunci ke agen ssh tanpa meminta kata sandi, tetapi hanya untuk sesi saat ini. Setelah reboot, saya harus menerbitkan ulang perintah.
Poulsbo
4
@Poulsbo & @Abram - lihat pembaruan saya, Sierra mengubah perilaku otomatis dan sekarang Anda harus menjalankannya ssh-add -Asecara manual untuk memuat gantungan kunci yang disimpan. Beberapa kemungkinan solusi yang dirujuk di atas.
trisweb
3
@trisweb Terima kasih atas tipnya. solusi joshbuchea untuk memodifikasi .ssh/configfile terlihat menjanjikan! Lihat github.com/lionheart/openradar-mirror/issues/…
Poulsbo
2
@ atau lihat jawaban yang diperbarui, dan beri tahu saya jika Anda memiliki umpan balik. Terima kasih!
trisweb
9
Bagus sekali! Dalam kasus saya, saya perlu menggunakan Abendera di samping bendera Kuntuk menambahkan kunci saya ke gantungan kunci dan mendaftarkan frasa sandi ke dalamnya ( ssh-add -AK ~/.ssh/[your-private-key]). Terima kasih!
youssman
22

Saya memiliki masalah yang sama, karena saya diminta SETIAP SAAT untuk frasa sandi kunci pub saya.

Per saran pengguna "trisweb" di atas, saya mengaktifkan opsi ini ke ~ / .ssh / config:

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

TAPI masih diminta setiap kali saya ingin menggunakan ssh.

Akhirnya saya menyalakan "ssh -v" dan menemukan baris debug ini:

debug1: key_load_private: frasa sandi salah yang disediakan untuk mendekripsi kunci pribadi

Saya kemudian membuka gantungan kunci saya di "Keychain Access.app", menemukan kunci bernama "SSH: /Users/username/.ssh/id_rsa" dan membukanya.

Saya mengklik "Tampilkan kata sandi" untuk mengungkapkan kata sandi dan memang menemukan bahwa frasa sandi di keyring adalah frasa sandi lama.

Saya memperbarui frasa sandi di Akses Keychain, dan sekarang berfungsi tanpa kata sandi.

Saya juga bisa memperbarui frasa sandi dengan frasa ini:

ssh-keygen -p -f ~ / .ssh / id_rsa

pengguna2688272
sumber
13

Anda diminta kata sandi setiap kali karena gantungan kunci "login" Anda dikunci setelah tidak aktif dan / atau tidur atau dalam kasus Anda reboot. Ada dua cara untuk menyelesaikan ini untuk Anda.

  1. Ubah pengaturan untuk gantungan kunci "login" Anda. Dengan asumsi kunci ssh Anda disimpan di gantungan kunci "login".

    • Buka Akses Keychain
    • Sorot gantungan kunci "login"
    • Klik kanan atau klik-opsi gantungan kunci "login"
    • Hapus centang pada kotak "Kunci setelah X menit tidak aktif" dan "Kunci saat tidur".
  2. Hasilkan kunci SSH lain tanpa menggunakan kata sandi.

    • Buka Terminal.
    • Masukkan perintah: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t adalah untuk tipe, -b adalah ukuran kunci, -C adalah komentar, -f file output (harus membuat direktori terlebih dahulu)
    • Jangan menetapkan frasa sandi.
    • Impor kunci SSH ke gantungan kunci "login" dengan ssh-add -K <path to ssh key>

Anda seharusnya tidak diminta memasukkan kata sandi gantungan kunci lagi.

Matthew Sanabria
sumber
2
Perhatikan bahwa ketika memohon ssh-adddari dalam SSH, security unlock-keychainharus dipanggil terlebih dahulu. Juga, saya tidak perlu membuat direktori untuk -fparameter. Sayangnya, saya masih harus memanggil security unlocl-keychainsesi SSH untuk mengakses Keychain login, yang meminta kata sandi setiap kali ...
Ohad Schneider
2
Intinya adalah memiliki frasa sandi pada kunci. Saya ragu bahwa membuat kunci SSH baru bermanfaat untuk pertanyaan itu.
Gray
7

Juga, di macOS Sierra dan HighSierra (tidak tahu tentang versi sebelumnya), menjalankan ssh-add -Aakan membuat agen memuat semua kunci yang frasa sandi disimpan pada Keychain ... Sangat berguna

JJarava
sumber
7

Untuk semua yang tidak berfungsi di atas, masalah saya tampaknya karena saya menduplikasi UseKeychain yes& AddKeysToAgent yesdi semua profil / pintasan kunci ssh. Saya memperbarui ~/.ssh/configfile saya untuk mendeklarasikan ini hanya sekali dan sekarang semuanya memuat saat login tanpa meminta kata sandi saat startup, misalnya:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar
Avolition
sumber
-3

Tambahkan kunci publik di:

.ssh/known_hosts

Kunci publik biasanya aktif:

/home/user/.ssh/id_rsa.pub

Semoga itu bisa membantu

lluisi
sumber
8
Saya pikir maksudauthorized_keys
Rene Larsen
Bagaimanapun, ini tidak berfungsi jika Anda memiliki lebih dari satu kunci!
sorin