ssh-add tidak persisten di antara reboot

150

Saya menambahkan kunci ssh ke agen dengan:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Setelah reboot, agen tidak memiliki kunci ini ditambahkan lagi:

$ ssh-add -l
The agent has no identities.

Kenapa ini terjadi?

ア レ ッ ク ス
sumber
Saya tidak punya waktu untuk menjawab sepenuhnya sekarang, tetapi gpg-agent dalam mode ssh akan melakukan apa yang Anda inginkan. Cobalah itu bukan ssh-agent lama. Jika ini membantu saya bisa mencoba dan mengembangkan ini ketika saya punya waktu nanti.
Vality
@ Vality: Saya ragu agen gpg akan terus-menerus menemukan reboot.
Pavel Šimerda
@ PavelŠimerda Ini mengenkripsi kunci privat dengan kata sandi pengguna kemudian menempatkannya $HOME/.gnupg/private-keys-v1.dsegera setelah Anda menambahkannya dengan ssh-add. Sungguh gigih. Nah dengan asumsi Anda memiliki direktori home yang tidak mudah menguap.
Vality
@ Vality: Bukankah itu dianggap masalah keamanan? Tidak bisakah Anda menggunakan kunci tanpa frasa sandi dan menyelesaikannya tanpa perlu agen?
Pavel Šimerda
1
@ PavelŠimerda Ini bukan masalah keamanan karena kunci disimpan terenkripsi dengan kata sandi pengguna, masih perlu kata sandi yang diketik setiap kali pengguna masuk untuk mendekripsi. Menyimpan kunci yang tidak terenkripsi berarti pengguna dengan root (atau pencuri yang mengambil hard disk Anda) dapat mencuri mereka dari direktori home Anda, dengan gnupg jika mereka mencuri mereka akan dienkripsi dengan kata sandi Anda dan dengan demikian tidak berguna.
Vality

Jawaban:

174

Penambahan kunci untuk agen bersifat sementara. Mereka hanya bertahan selama agen berjalan. Jika Anda membunuhnya atau me-restart komputer Anda mereka hilang sampai Anda menambahkannya lagi. Dari ssh-agenthalaman manual:

ssh-agent adalah program untuk menyimpan kunci privat yang digunakan untuk otentikasi kunci publik (RSA, DSA, ECDSA). Idenya adalah bahwa ssh-agent dimulai pada awal sesi X atau sesi login, dan semua jendela atau program lain dimulai sebagai klien untuk program ssh-agent. Melalui penggunaan variabel lingkungan, agen dapat ditemukan dan secara otomatis digunakan untuk otentikasi ketika masuk ke mesin lain menggunakan ssh (1).

Agen awalnya tidak memiliki kunci pribadi. Kunci ditambahkan menggunakan ssh-add (1). Ketika dijalankan tanpa argumen, ssh-add (1) menambahkan file ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsadan ~/.ssh/identity. Jika identitas memiliki kata sandi, ssh-add (1) meminta kata sandi pada terminal jika memiliki satu atau dari program X11 kecil jika berjalan di bawah X11. Jika tidak satu pun dari ini yang terjadi maka otentikasi akan gagal. Kemudian mengirimkan identitas ke agen. Beberapa identitas dapat disimpan di agen; agen dapat secara otomatis menggunakan identitas ini. ssh-add -lmenampilkan identitas yang saat ini dipegang oleh agen.

macOS Sierra

Dimulai dengan macOS Sierra 10.12.2 , Apple telah menambahkan opsi konfigurasi UseKeychain untuk konfigurasi SSH. Anda dapat mengaktifkan fitur ini dengan menambahkan UseKeychain yeske ~/.ssh/config.

Host *
  UseKeychain yes

Gantungan Kunci OSX

Saya tidak menggunakan OSX tetapi menemukan T&J di SuperUser berjudul: Bagaimana cara menggunakan Keychain Mac OS X dengan kunci SSH? .

Saya mengerti bahwa sejak Mac OS X Leopard Keychain telah mendukung penyimpanan kunci SSH. Bisakah seseorang tolong jelaskan bagaimana fitur ini seharusnya berfungsi.

Jadi dari suaranya Anda bisa mengimpor kunci SSH Anda ke Keychain menggunakan perintah ini:

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

Kunci Anda kemudian harus bertahan dari boot ke boot.

Setiap kali Anda me-reboot Mac Anda, semua kunci SSH di gantungan kunci Anda akan secara otomatis dimuat. Anda harus dapat melihat kunci di aplikasi Keychain Access, dan juga dari baris perintah melalui:

  ssh-add -l

Sumber: Super User - Bagaimana cara menggunakan Keychain Mac OS X dengan kunci SSH?

slm
sumber
Benarkah? Di Linux saya tidak memiliki masalah ini. Apakah saya harus "ssh-add my_key" setiap kali saya me-restart komputer saya?
ア レ ッ ク ス
2
@Alex Seperti yang dijelaskan jawabannya, agen secara otomatis menambahkan ~/.ssh/id_rsa. Saya menduga ini adalah lokasi keyfile Anda di linux. Mungkin juga Anda tidak menggunakan agen kunci ssh standar. Ada yang lain, seperti gnome-keyring-daemon, yang mungkin memiliki perilaku berbeda.
Patrick
tetapi pada Mac itu bernama "id_rsa_mac". Bagaimana cara membuat agen menambahkannya secara otomatis?
ア レ ッ ク ス
@ Patrick: Saya tidak yakin apakah klasik ssh-agentmenambahkan kunci secara otomatis. Menurut pendapat saya itu ssh-addyang membaca lokasi standar, atau sshklien jika Anda tidak menggunakan agen.
Pavel Šimerda
5
Sidenote kecil, jika perintah ssh-add Anda tidak mengenali flag -K Anda mungkin menggunakan versi macports dari ssh-add ... Anda dapat mem-bypass versi macports dengan menentukan path lengkap ke versi OSX dari ssh-add seperti ini:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

Ini ssh-agentadalah layanan sesi yang menyimpan kunci sementara untuk pengguna.

Tujuan utama agen SSH adalah untuk mengingat versi teks kunci yang diamankan menggunakan frasa sandi. Dengan kata lain, kunci disimpan pada disk yang dienkripsi menggunakan frasa sandi dan pemilik kunci menggunakan ssh-addatau alat GUI untuk memberikan frasa sandi dan memerintahkan agen untuk mengingatnya sampai sesi keluar atau pengguna meminta penghapusan secara eksplisit.

Jika Anda tidak menggunakan kata sandi dan Anda tidak menggunakan penerusan agen (yang tidak aman untuk sebagian besar tujuan), Anda tidak memerlukan agen sama sekali . Setiap klien SSH harus dapat membaca kunci dari disk, baik dari lokasi standar, atau dari yang ditentukan secara eksplisit.

Lokasi standar tercantum di halaman manual ssh(1):

Standarnya adalah ~ / .ssh / identitas untuk protokol versi 1, dan ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 dan ~ / .ssh / id_rsa untuk versi protokol 2.

Saat menggunakan lokasi yang tidak standar, Anda dapat menggunakan -isakelar untuk sshdijelaskan di halaman manual yang sama, atau opsi terkait di klien SSH yang Anda gunakan.

Pavel Šimerda
sumber
4
+1 untuk menganjurkan tidak digunakannyassh-agent
dg99
7

Di Sierra :

Gunakan UseKeychain . (Saya belum mencoba ini tetapi sepertinya solusi yang paling benar.)

Atau

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Atau buat file plist alih-alih ditambahkan ke ~/.bash_profile.

Penafian: seperti yang telah dicatat orang lain, saya tidak tahu seberapa aman menyimpan frasa sandi ssh di gantungan kunci.

David Winiecki
sumber
Saya mencoba semua metode di atas tetapi hanya yang ini berhasil. Terima kasih!
Duannx